篮球iOS开发之UIKit Dynamics学习心得

  可自我照旧抱着一丝希望,等着您的出现。

在iOS7上新扩充了UIKitDynamic,它亦可让UIView模拟逼真的大体效用。如引力,碰撞,弹簧,吸附等成效,有了那一个意义能轻轻松松的增强使用的用户体验。想要落成那一个力学动画效果,首先要开创七个力学动画生成器(UIDynamicAnimator),然后利用种种表现展开定制,可用于定制UIDynamicAnimator的行为的类有:UIAttachmentBehaviorUICollisionBehaviorUIGravityBehaviorUIDynamicItemBehaviorUIPushBehaviorUISnapBehavior。他们可以予以UIView逼真的作为和卡通。

  小编偷偷的将它交给二个本身认为无话不谈的好爱人,让他帮小编转交给你。

吸附(UISnapBehavior)

吸附成效有点像磁铁吸铁块一样,只要我们钦赐三个点,具有吸附效果的物体就有了被磁铁吸过去的功力了。

大家在显示器上点名2个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];
}

  坏的他相同都未曾,好的她全占。

总结

著作代码德姆o点这里
UIDynamicAnimator还有代理方法和其余的小方法,真正发挥它的功听从的是你的新意,有好的ideal就出手撸啊!

  ②懵懂十五周岁

碰撞(UICollisionBehavior)

说到碰撞,多少个是实体之间的相撞,2个是与境界的碰撞,在上边的引力作用演示图中,足球从上落下,向来落到显示屏之外,那是由于大家从未给他设置边界。大家看看碰撞的效果图:

自作者给图中的篮球足球设置了动力功效和冲击效果,代码如下:

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];

  于扬,于扬,于扬……

弹簧

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

弹簧效果实在是在接连效果上落成的,恰当设置连接效果的Frequency,Damping那贰个性格后就可以高达弹簧的功用了,在上头的代码加上:

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

  笔者可以和您的好匹夫儿称兄道弟,打成一片,却根本不曾和您着重过,没有说过一句话,因为,看到您自个儿整整神经都会混杂。

重力(UIGravityBehavior)

引力的功用如图所示:

对于引力行为,须要留意的有角度(angle)和量级(magnitude,小编也叫它动力增加速度度),已毕代码如下:

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

  安七七好丑,

转移一个力学动画生成器

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

  对吧?于扬!

连接(UIAttachmentBehavior)

连接就是让1个实体的一言一行和活动受此外五个物体的移位。使用连接效果要钦命连接点。效果大概如下:

在上头的出力演示图中,小编添加了一个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];
}

  

实体属性

物体都有许多的质量,通过对其安排,可以达到不相同的职能,上边是一些常用的习性:

属性 描述
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表示一旦其他作用力消失,物体就会停止

  

推力

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

本身用了3个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];
}

篮球 1

NOTE:每一个力学动画生成器都以独立的,三个动画力学生成才可同时运转。要让力学动画生成器持续运作,必需要有指向它的可行运用。一旦动画处于平稳状态(如弹簧效果复苏原状)之后,力学动画生成器将暂停,不在执行其余总结了。不过对于未用的力学动画生成器,最好把它删除掉。

  体会到了在暗恋的浅绿和不堪中寻到了一丝希望与光线的幸福感。

  遇见你以往,小编的脑子里唯有那五个字。

  走路不小心撞到了你,作者会低下头神速说着对不起,因为自身不敢珍重你,小编怕本身会脸红,因为作者悄悄的喜爱着您。

  

  

  那是大家班全体女人对他的一模一样评价。

  

  你好似人间蒸发了一致,消失的彻彻底底。

  

  

  上课偷偷瞄你,你看復苏时,作者会飞快转头假装望着窗外看,作者怕你会发觉自身跳动的命脉。

  听他们说,得到四叶草的人会博得幸福,于是本人便寻遍了学校,找到了两颗,以为这么幸福就会光顾。

  作者羡慕那个三秒和您闹成一团的女子,作者羡慕他们可以毫无顾忌的和您玩,和您疯,和你闹,和你开玩笑的闲谈,我好羡慕。小编不时想,为啥他们能够,可本人却连站在您目前看您一眼的胆略都没有。

  没有您的QQ,没有你的电话机,没有您的地址。

  

  

  对呀,灰姑娘怎么去配优良的皇子。

  

  

  你受万人向往,而自小编只是默默小丑。

  

  

  

  将来有那么一天,作者会再一次蒙受你……

  然则,于扬,为何,你突然遗失了,是转学了吗?转到哪个地方去了?大家还会再相会吗?

  

  

  于扬是高校最受欢迎的男士,

  

篮球 2

  吃饭不小心洒在你身上作者会快速给您擦干净,然后随即掉头离开,因为本人怕你会合到小编的恐慌。

  他就是如此完美。

  

  ——安七七

  

  别忘了,小编有四叶草呢!

  可惜完美的人总是希望不可及,他如同璀璨的星球,那么分明,却永远触及不到。

  不言而喻,于扬他很完美……

  可是……

  安七七正是异想天开……

  那是别人对七七和对于扬截然相反的评价。

  自此,小编对您的暗恋变成了对你的悬念,一贯从未忘记您。

  可是,四叶草依旧送到了你手中,小编傻傻的想,恐怕你也是欣赏小编的。

  那是自个儿懵懵懂懂的十8岁。

篮球 3

  就像是三个世纪,小编迟迟没有你的其余联系形式,也从未听到过有关您的别的新闻。

  

  

  因为自己有四叶草。

  

  于扬他好棒,

  安七七好不要脸,

  于扬他好帅,

  

  反正已偷偷喜欢了您一年,再想念一年又何妨?

  安七七好以螳当车,

  作者一向找原因,找消除的法门,不过,一向没找到……

  

  于扬他篮球打的专门棒,

  这一年十分短,非常短,很短……

  

  

  安七七是或不是脑部坏了,