UIKit Dynamics (一) 概述
UIKit Dynamics (二) 重力
UIKit Dynamics (三) 碰撞
UIKit Dynamics (四) 急停
UIKit Dynamics (五) 施力
UIPushBehavior
UIPushBehavior 模擬了對物體施加力量蠕蚜,施力方式分兩種鹰溜,一種是 instantaneous 給物體一個初動力盒使,另一種是 continuous 給物體一個持續(xù)力即產(chǎn)生加速度擒贸。然后物體就會按照受力進行運動髓考。
使用
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;
// 施力的狀態(tài)
@property (nonatomic, readwrite) BOOL active;
// 施力的角度,取值 0~2*PI
@property (readwrite, nonatomic) CGFloat angle;
// 施力的大小憔涉,默認為 nil鹉究,即沒有力
// 當取值為單位 1 的時候會對物體施加一個 100 points / second2 的加速度
@property (readwrite, nonatomic) CGFloat magnitude;
// 施力的方向向量掏父,即將 angle 轉換為二維向量
@property (readwrite, nonatomic) CGVector pushDirection;
并且有如下方法:
// 復合函數(shù)鹃栽,直接對 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;
這兩個函數(shù)谱姓。
UIPushBehavior 默認是對物體的中心即 center 的位置進行施力,但是可以通過 setTargetOffsetFromCenter
這個函數(shù)設置施力位置相對于中心的偏移量国旷,當物體的受力部位不在中心并且持續(xù)受力(mode 為 continuour)時就會開始旋轉矛物。
本文 demo 是 Push 頁面,可以通過拖動 slider 調節(jié) angle(0~2*PI) 和 magnitude(0~1) 大小跪但,并且點擊方塊中可以改變施力點的位置(點擊 replay 會重置施力點履羞,請在物體運動過程中修改)。項目地址