UIKit Dynamics (五) 施力

UIKit Dynamics (一) 概述
UIKit Dynamics (二) 重力
UIKit Dynamics (三) 碰撞
UIKit Dynamics (四) 急停
UIKit Dynamics (五) 施力

UIPushBehavior

UIPushBehavior 模拟了对物体施加力量,施力方式分两种,一种是 instantaneous 给物体一个初动力,另一种是 continuous 给物体一个持续力即产生加速度。然后物体就会按照受力进行运动。

使用

UIPushBehavior 像其他效果一样,通过一个 NSArray 进行初始化然后加入到 UIDynamicAnimator 中即可使用,但由于 UIPushBehavior 的施力大小默认值是 0,因此物体不会运动,需要修改 magnitude 属性才可以。

_pushBehavior = [[UIPushBehavior alloc] initWithItems:@[_box] mode:UIPushBehaviorModeInstantaneous];
_pushBehavior.magnitude = 1.0f;
_pushBehavior.angle = M_PI_2;
[_animator addBehavior:_pushBehavior];

配置

UIPushBehavior 在初始化的时候可选施力的属性 UIPushBehaviorModeInstantaneous 或 UIPushBehaviorModeContinuous。

UIPushBehavior 实例化后主要有如下属性:

// 施力的属性,同初始化
@property (nonatomic, readonly) UIPushBehaviorMode mode;
// 施力的状态
@property (nonatomic, readwrite) BOOL active;
// 施力的角度,取值 0~2*PI
@property (readwrite, nonatomic) CGFloat angle;
// 施力的大小,默认为 nil,即没有力
// 当取值为单位 1 的时候会对物体施加一个 100 points / second² 的加速度
@property (readwrite, nonatomic) CGFloat magnitude;
// 施力的方向向量,即将 angle 转换为二维向量
@property (readwrite, nonatomic) CGVector pushDirection;
Push

并且有如下方法:

// 复合函数,直接对 angle 和 magnitude 赋值
- (void)setAngle:(CGFloat)angle magnitude:(CGFloat)magnitude;

// 获得和修改施力偏移点
- (UIOffset)targetOffsetFromCenterForItem:(id <UIDynamicItem>)item;
- (void)setTargetOffsetFromCenter:(UIOffset)o forItem:(id <UIDynamicItem>)item;

接下来要讨论一下 - (UIOffset)targetOffsetFromCenterForItem:(id <UIDynamicItem>)item;- (void)setTargetOffsetFromCenter:(UIOffset)o forItem:(id <UIDynamicItem>)item; 这两个函数。
UIPushBehavior 默认是对物体的中心即 center 的位置进行施力,但是可以通过 setTargetOffsetFromCenter 这个函数设置施力位置相对于中心的偏移量,当物体的受力部位不在中心并且持续受力(mode 为 continuour)时就会开始旋转。

Target Offset

本文 demo 是 Push 页面,可以通过拖动 slider 调节 angle(0~2*PI) 和 magnitude(0~1) 大小,并且点击方块中可以改变施力点的位置(点击 replay 会重置施力点,请在物体运动过程中修改)。项目地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS UIKit力学(一)基本介绍(目录) 导语 推动行为是将一个推力作用到受力元素上,就好像是‘一股气流’作用...
    JerryLMJ阅读 4,045评论 2 5
  • 前言: UIKit Dynamics是iOS7.0新增的一组类和方法,可以赋予UIView逼真的行为和特征,从而改...
    Y_小葱阅读 692评论 1 1
  • iOS 7增加了UIKit Dynamics库,其集成于UIKit框架中,将2D物理引擎引入了UIKit,提供了以...
    pro648阅读 2,881评论 2 14
  • 写在清华自主培训开学典礼 很幸运,能在清华大学的校园和你们相识! 自主择业——顾名思义,我们为自己的人生选择了一条...
    你好中年阅读 227评论 0 0
  • 无论是对帮助你的人还是对伤害你的人都要有感恩之心,帮助你的人让你在生活的道路上顺利一些,伤害你的人会激励你前行。 ...
    微笑你我他阅读 183评论 0 0