类默认也遵守UIDynamicItem协议 物理仿真行为 UIDynamic提供了以下几种物理仿真行为 UIGravityBehavior:重力行为 UICollisionBehavior:碰撞行为 UISnapBehavior ) @property (nonatomic, assign, readwrite) id <UICollisionBehaviorDelegate> collisionDelegate; 捕捉行为(UISnapBehavior ) 简介 可以让物体迅速冲到某个位置(捕捉位置),捕捉到位置之后会带有一定的震动 UISnapBehavior的初始化 - (instancetype)initWithItem:(id <UIDynamicItem >)item snapToPoint:(CGPoint)point; UISnapBehavior常见属性 //用于减幅、减震(取值范围是0.0 ~ 1.0,值越大,震动幅度越小) @property (nonatomic, assign) CGFloat damping; UISnapBehavior使用注意 如果要进行连续的捕捉行为,需要先把前面的捕捉行为从物理仿真器中移除
UICollisionBehavior 碰撞行为 UIAttachmentBehavior 附着行为 UIPushBehavior 推动行为 UIDynamicItemBehavior 动力行为 UISnapBehavior 动力行为.gif 6.UISnapBehavior (捕获行为) 捕获行为,是移动视图到某个位置,然后到达后,有一个摆动效果。 - (void)animateTest { // 捕获行为 UISnapBehavior *snapBehavior = [[UISnapBehavior alloc] initWithItem
在最后一节中,每当用户点击屏幕时,都会添加另一种类型的动态行为UISnapBehavior。 一个UISnapBehavior使一个对象跳跃到一个有弹性的弹簧式动画的指定位置。 在屏幕上只能看到一个方块的UISnapBehavior效果会更容易。 在viewDidLoad上添加两个属性: var square: UIView! var snap: UISnapBehavior! 这将跟踪方块视图,以便您可以从视图控制器的其他位置访问它。 您将在下一个使用捕捉对象。 UITouch snp = UISnapBehavior(item: square, snapTo: touch.location(in: view)) animtor.addBehavior
UIDynamicBehavior:仿真行为,是动力学行为的父类,基本的动力学行为类UIGravityBehavior、UICollisionBehavior、UIAttachmentBehavior、UISnapBehavior ,注意:避免重复添加行为对象,可以用懒加载 UIDynamicBehavior (抽象类): UIGravityBehavior:重力行为 UICollisionBehavior:碰撞行为 UISnapBehavior 0.3 animations:^{ view.backgroundColor = [UIColor redColor]; }]; } } ---- 四、UISnapBehavior 创建物理行为 UISnapBehavior *snap = [[UISnapBehavior alloc] initWithItem:self.redView snapToPoint:loc];
有了这些,似乎可以做个老鹰捉小鸡的游戏了 - -… UISnapBehavior 将 UIView 通过动画吸附到某个点上。 初始化的时候设定一下 UISnapBehavior 的 initWithItem:snapToPoint: 就行,因为 API 非常简单,视觉效果也很棒,估计它是今后非游戏 app 里会被最常用的效果之一了
用户交互 添加另一种类型的动态行为——UISnapBehavior,当用户点击时,UISnapBehavior 让对象以弹簧般动画效果跳到一个特定的位置 现在移除firstContact属性以及在collisionBehavior nil) { animator.removeBehavior(snap) } let touch = touches.anyObject() as UITouch snap = UISnapBehavior
/ 设置推力大小 open var magnitude: CGFloat // 设置推力的方向 open var pushDirection: CGVector } 捕获行为:UISnapBehavior @available(iOS 7.0, *) @MainActor open class UISnapBehavior : UIDynamicBehavior { // 初始化方法 设置最终物理元素固定在的位置