关于穿越

一年又要过去了,在我们团结一心那些维度的半空中里,大家陪着地球绕着太阳又转了一圈。

在iOS7上新增添了UIKitDynamic,它亦可让UIView模拟逼真的情理成效。如重力,碰撞,弹簧,吸附等功能,有了那几个成效能自在的进步运用的用户体验。想要完毕那些力学动画效果,首先要开创一个力学动画生成器(UIDynamicAnimator),然后利用种种行为开展定制,可用以定制UIDynamicAnimator的一坐一起的类有:UIAttachmentBehaviorUICollisionBehaviorUIGravityBehaviorUIDynamicItemBehaviorUIPushBehaviorUISnapBehavior。他们力所能及予以UIView逼真的表现和卡通。

我们想回来过去,我们想从头来过,没有后悔没有因果,享受穿越的野趣。但是的确要是有一天我们通过了,回到西夏同意,玄汉可以,汉代可以……大家能干什么呢?

NOTE:每个力学动画生成器都是单身的,多少个动画力学生成才可同时运转。要让力学动画生成器持续运行,必必要有指向它的得力利用。一旦动画处于平稳状态(如弹簧效果苏醒原状)之后,力学动画生成器将中断,不在执行别的总结了。可是对于未用的力学动画生成器,最好把它删除掉。

就您一人,光着回去,你能干什么?

浮动一个力学动画生成器

UIDynamicAnimator *animator =[ [UIDynamicAnimator alloc] initWithReferenceView:self.view];//行为视图的父视图必须是动画生成器的参考视图
[animator addBehavior:aDynamicBeahvior];//aDynamicBeahvior是一个行为

就若是回到南齐吧,当年网络小说都流行“清穿”。

重力(UIGravityBehavior)

引力的效劳如图所示:

对此动力行为,需求专注的有角度(angle)和量级(magnitude,我也叫它动力加快度),达成代码如下:

UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[footballView]];
 //angle:角度(弧度)  magnitude:量级(重力系数)
[gravityBehavior setAngle:3.14/2 magnitude:0.1f];
[self.animator addBehavior:gravityBehavior];

清穿本来就瞎扯,但瞎扯之中还要瞎扯。凡穿回来的人相见的不是君王就是诸侯,爱上的不是娘娘就是格格,打个嗝放个屁可能都会变动历史,拿着当代的雍容到太古去显呗,让北齐人都跟傻逼似的。

足球,碰撞(UICollisionBehavior)

说到冲击,一个是实体之间的冲击,一个是与边界的冲击,在地点的引力效能演示图中,足球从上落下,一贯落到显示屏之外,那是出于我们从没给她安装边界。大家看看碰撞的功效图:

本身给图中的篮球足球设置了重力效能和冲击效果,代码如下:

UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.footballView,self.basketballView]];
[gravityBehavior setAngle:3.14/2 magnitude:0.1f];   
//碰撞效果
UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.footballView,self.basketballView]];
[collisionBehavior setCollisionMode:UICollisionBehaviorModeEverything];//碰撞效果,必须指定的
/**
 *  UICollisionBehaviorModeEverything:物体既相互碰撞又与边界碰撞
 *  UICollisionBehaviorModeBoundaries:物体不相互碰撞,只与边界碰撞
 *  UICollisionBehaviorModeItems:物体相互碰撞,不与边界碰撞
 */
//设置边界为动画器参考view的视图范围
collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;
//代理可以监听碰撞
collisionBehavior.collisionDelegate = self;
[self.animator addBehavior:gravityBehavior];
[self.animator addBehavior:collisionBehavior];

事实上只要大家真正一个人光着回去了,大家除了扰民添乱缔造混乱什么都干不了。

连接(UIAttachmentBehavior)

总是就是让一个物体的一举一动和运动受别的一个实体的移位。使用连接效果要指定连接点。效果几乎如下:

在地点的功效演示图中,我添加了一个pan手势,然后取pan的坐标点让其变为篮球center,在接连效果的效用下,足球会由于篮球的活动而动,具体代码如下:

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.footballView,self.basketballView]];
[collisionBehavior setCollisionMode:UICollisionBehaviorModeEverything];
collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;

CGPoint basketballCenter = CGPointMake(self.basketballView.center.x, self.basketballView.center.y);
self.attachmentBehavior = [[UIAttachmentBehavior alloc] initWithItem:self.basketballView attachedToAnchor:basketballCenter];

[self.animator addBehavior:collisionBehavior];
[self.animator addBehavior:self.attachmentBehavior];

self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handAttachmentesture:)];
[self.view addGestureRecognizer:self.panGesture];

- (void)handAttachmentesture:(UIPanGestureRecognizer *)gesture{
    CGPoint gesturePoint = [gesture locationInView:self.view];
    self.basketballView.center = gesturePoint;
    [self.attachmentBehavior setAnchorPoint:gesturePoint];
}

只有大家任何国家都回到,带上工厂,军队,以及所有上层建筑,最好还有黄金,就跟那儿蒋中正跑到广东那么,能带的都带上。

弹簧

弹簧效果应该都懂,先看看效果:

弹簧效果实在是在连年效果上贯彻的,恰当设置连接效果的Frequency,Damping那二个特性后就能够达标弹簧的作用了,在地点的代码加上:

[self.attachmentBehavior setFrequency:1.0f];//振动频率
[self.attachmentBehavior setDamping:0.1f];//熨平动画的峰值

自身想现代的人回到能做的事也是最有意义的事就是充裕利用资源。大家得以在爱新觉罗·玄烨爷的疆土上建多少个大的核电站,在清世宗王朝的国家上挖多少个石油井,在乾隆大帝盛世的时候开首穿越式的工业大革命。告诉乾隆大帝,君主万岁,后世子孙愿援救您一统18世纪的末日的地球。对,倘若回到北齐,一定告诉赵九重,足球要从娃娃抓起,从晋代抓起。

吸附(UISnapBehavior)

吸附作用有点像磁铁吸铁块一样,只要大家指定一个点,具有吸附功效的物体就有了被磁铁吸过去的效应了。

大家在屏幕上指定一个tap手势,讲tap后的点作为磁铁,代码:

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
self.tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handTapGesture:)];
[self.view addGestureRecognizer:self.tapGesture];

- (void)handTapGesture:(UITapGestureRecognizer *)gesture{
    CGPoint point = [gesture locationInView:self.view];
    if (self.snapBehavior == nil) {
        self.snapBehavior = [[UISnapBehavior alloc] initWithItem:self.footballView snapToPoint:point];
        self.snapBehavior.damping = 0.75;
    }
    [self.animator addBehavior:self.snapBehavior];
}

但愿能量也可以穿过历史呢。人说印度洋上的蝴蝶扇下翅膀,全世界气候都有可能变动。那你一个大活人回去,穿越到的充裕世界将成为啥样!

推力

推力指得是足以对实体施加推力,效果:

自我用了一个tap手势作为施加推力的源,代码如下:

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

UICollisionBehavior * collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.footballView]];
[self.animator addBehavior:collisionBehavior];

UIPushBehavior *pushBehavior = [[UIPushBehavior alloc] initWithItems:@[self.footballView] mode:UIPushBehaviorModeInstantaneous];
pushBehavior.angle = 0.0;
pushBehavior.magnitude = 0.;

self.pushBehavior = pushBehavior;
[self.animator addBehavior:self.pushBehavior];

self.tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handTapGesture:)];
[self.view addGestureRecognizer:self.tapGesture];

- (void)handTapGesture:(UITapGestureRecognizer *)gesture{
    CGPoint point = [gesture locationInView:self.view];
    CGPoint origin = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds));
    CGFloat distance = sqrtf(powf(point.x-origin.x, 2.0) + powf(point.y-origin.y, 2.0));
    CGFloat angle = atan2(point.y-origin.y, point.x-origin.x);
    distance = MIN(distance, 100.0);
    [self.pushBehavior setMagnitude:distance/100.0];
    [self.pushBehavior setAngle:angle];
    [self.pushBehavior setActive:true];
}

不过没什么,历史,时间,就N多个系,一旦回到了,改变了,就开辟了新的野史。现在的社会风气还在,在另一个上空和时间,新的历史和切实也在继续。

实体属性

物体都有很多的属性,通过对其配备,可以直达不一致的出力,下边是有的常用的性质:

属性 描述
elasticity 表示与其他物体碰撞时的弹性,取值0-1,0表示没有弹性,1表示反弹作用力与碰撞作用力相等
allowsRotation 指定物体在受力时是否会旋转,默认YES
angularResistance 旋转助力,值越大旋转下降得越快,取值为0-CGFLOAT_MAX
density 物体的密度,调整密度会影响重力和碰撞的效果。默认情况下,100×100的物体质量为1,100×200为2
friction 物体之间的滑动阻力,0表示没有摩擦力,1表示摩擦力很大
resistance 空气阻力,取值为0-CGFLOAT_MAX,0表示没有空气阻力,1表示一旦其他作用力消失,物体就会停止

只要一个屌丝清穿了,回到了玄烨年间,如果是因为屌丝的存在历史有了改动,那么之后的野史足以称作屌丝史,以便同其余维度的历史不相同。屌丝史一年一年的发展,曾经的轩然大波和人物不再有,但规律还在,社会应当如故那么,最后最可能的场地就是屌丝如故屌丝。

总结

小说代码Demo点这里
UIDynamicAnimator还有代理方法和其余的小方法,真正发挥它的效率力的是你的新意,有好的ideal就开首撸啊!

只要得以穿越,你愿意去哪个年份吗?借使就自己一个人光着回去,我看或者算了吧,回到哪个朝代估算我都活不成,见不到皇帝王爷也娶不了娘娘格格,弄不佳当做妖人给咔嚓了。

为此,就踏实呆在你的维度里吗,是哪些时代的人就享受你那个时期的雍容,忍受你那一个时期的粗鲁。在漫长的物质发展,能量转换的时日经过里,大家那么些以类脂存在的明白生物,刹那出现,刹那又会流失……

让大家的想想自由的通过,不受时间和世俗的限定;让我们的肉体,踏实地执着于后天,抓紧时间享受世俗,华贵着,卑微着,善良着,邪恶着,生活着,活动着。

仅以此文献给即将过去的2014,也许3014年的时候有人可以穿越回去,就像自己那屌丝的商讨已经越过到了3014一模一样。

一万年太短,只争朝夕!四遍通过不够,最好随意!