UIDynamicAnimator 是iOS7引入的用来模拟现实世界的物理模型
相当于一个物理坐标系 把物理行为添加到这个上面,相对于这个坐标系的作用力
主要有以下6种物理行为
UIGravityBehavior 重力
UIAttachmentBehavior 吸附力
UISnapBehavior 快速移动的力
UIPushBehavior 推力
UICollisionBehavior 碰撞力
UIDynamicItemBehavior
1.创建一个 UIDynamicAnimator 一般设为全局属性
@property (nonatomic, strong) UIDynamicAnimator *animator;
//力产生的范围在ReferenceView的区域上
_animator = [[UIDynamicAnimator alloc] initWithReferenceView:self];
2. UIGravityBehavior - 重力
magnitude - 重力加速度值 默认情况下 1000 points/second²
angle - 重力的方向(由弧度指定)
gravityDirection - 重力的方向(由vector指定,默认(0.0,1.0))
//添加一个重力行为
UIGravityBehavior *gravity = [[UIGravityBehavior alloc] initWithItems:objects];
gravity.magnitude = 10;
[_animator addBehavior:gravity];
3. UIAttachmentBehavior - 吸附力
damping - 阻尼(阻力大小)
frequency - 震荡频率
length - 吸附的两个点之间的距离(锚点和Item或者Item之间)
//items之间的吸附行为
- (instancetype)initWithItem:(id <UIDynamicItem>)item1 attachedToItem:(id <UIDynamicItem>)item2;
//item和锚点之间创建一个吸附力,默认是item 的中心
UIAttachmentBehavior *behavior = [[UIAttachmentBehavior alloc] initWithItem:ballBearing
attachedToAnchor:[anchor center]];
[_animator addBehavior:behavior];
4. UISnapBehavior 迅速移动行为
//根据 item 和 point 来确定一个 item 要被定到哪个点上
_snap = [[UISnapBehavior alloc] initWithItem:self.imageView1 snapToPoint:imageView1.center];
//default 0.5这个值越大,震动的幅度越小 是从0.0~1.0当时当它为负数时 也震动,snap.snapPoint是你的这个吸附行为要吸附到哪个点上 当改变这个值的时候会启动这个行为
// 动画结束的时候的震荡值 0.0-1.0;其中0.0最小,1.0最大。默认0.5
_snap.damping =0.1;
5. UIPushBehavior 推力
// 连续的推动 UIPushBehaviorModeContinuous
// 瞬间的推动 UIPushBehaviorModeInstantaneous
//angle - 力的角度
//magnitude - 推力大小
self.pushBehavior = [[UIPushBehavior alloc] initWithItems:@[recoginizer.view] mode:UIPushBehaviorModeContinuous];
//力作用的方向
self.pushBehavior.pushDirection = CGVectorMake([recoginizer translationInView:self].x/10.f, 0);
6.UICollisionBehavior 碰撞力
UICollisionBehavior *behavior = [[UICollisionBehavior alloc] initWithItems:objects];
//不超出屏幕边缘
behavior.translatesReferenceBoundsIntoBoundary = YES;
7.UIDynamicItemBehavior
UIDynamicItemBehavior *itemBehavior = [[UIDynamicItemBehavior alloc] initWithItems:_balls];
//弹力
itemBehavior.elasticity = 1.0;
itemBehavior.allowsRotation = NO;
//线性滑动时阻力
itemBehavior.resistance = 1.f;
return itemBehavior;