UIKit動(dòng)力學(xué)的引入烈菌,并不是以替代CA或者UIView動(dòng)畫為目的的忘闻,在絕大多數(shù)情況下CA或者UIView動(dòng)畫仍然是最優(yōu)方案精续,只有在需要引入逼真的交互設(shè)計(jì)的時(shí)候,才需要使用UIKit動(dòng)力學(xué)它是作為現(xiàn)有交互設(shè)計(jì)和實(shí)現(xiàn)的一種補(bǔ)充而存在的处窥。
三個(gè)比較重要的對(duì)象
UIDynamicItem:用來(lái)描述一個(gè)力學(xué)物體的狀態(tài),其實(shí)就是實(shí)現(xiàn)了UIDynamicItem委托的對(duì)象玄组,或者抽象為有面積有旋轉(zhuǎn)的質(zhì)點(diǎn) (所有的 UI 對(duì)象都實(shí)現(xiàn)了這個(gè)協(xié)議)滔驾, 說(shuō)白了就是執(zhí)行物理仿真效果的 view ;
UIDynamicBehavior:動(dòng)力行為的描述俄讹,用來(lái)指定UIDynamicItem應(yīng)該如何運(yùn)動(dòng)哆致,即定義適用的物理規(guī)則。一般我們使用這個(gè)類的子類對(duì)象來(lái)對(duì)一組UIDynamicItem應(yīng)該遵守的行為規(guī)則進(jìn)行描述患膛;
-
UIDynamicAnimator:動(dòng)畫的播放者(管理者)摊阀,動(dòng)力行為(UIDynamicBehavior)的容器,添加到容器內(nèi)的行為將發(fā)揮作用;
- UIDynamicAnimator 的 ReferenceView:等同于力學(xué)參考系驹溃,如果你的初中物理不是語(yǔ)文老師教的話城丧,我想你知道這是啥..只有當(dāng)想要添加力學(xué)的UIView是ReferenceView的子view時(shí),動(dòng)力UI才發(fā)生作用豌鹤。
基本的體系結(jié)構(gòu)圖
** UIDynamicBehavior**
- UIAttachmentBehavior:附著行為亡哄。處理是 item 和 錨點(diǎn),item 和 item 之間的吸附關(guān)系布疙。item 和 錨點(diǎn)蚊惯,item 和 item 之間就像一根木頭桿子一樣連接。
- UICollisionBehavior:碰撞行為灵临。 處理是 item 和 item 之間截型,item 和碰撞邊界之間的關(guān)系。
- UIDynamicItemBehavior:動(dòng)力元素
- UIFieldBehavior:(iOS9 新加的)
- UIGravityBehavior:重力行為儒溉。 更具指定的重力方向進(jìn)行自由落體運(yùn)動(dòng)宦焦。
- UIPushBehavior:推動(dòng)行為。給item 一個(gè)持續(xù)或瞬間的力顿涣。
- UISnapBehavior:捕獲行為波闹。 item 會(huì)運(yùn)動(dòng)到某個(gè)固定的 point 。在運(yùn)動(dòng)到 point 過(guò)程中會(huì)產(chǎn)生動(dòng)畫效果涛碑。
Dynamic 簡(jiǎn)單使用的三部曲
- 創(chuàng)建 DynamicAnimator
- 創(chuàng)建 DynamicBehavior 并將 DynamicBehavior 添加到 DynamicAnimator 中精堕。
- 創(chuàng)建 UIDynamicItem 并將 UIDynamicItem 添加到 DynamicBehavior 中。
在實(shí)際的寫代碼過(guò)程是反過(guò)來(lái)的
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIDynamicAnimator *animator;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 1. 創(chuàng)建要進(jìn)行物理仿真的 item
UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(100, 50, 100, 100)];
aView.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:aView];
// 2. 創(chuàng)建 item 要執(zhí)行的物理仿真行為
/*
1. 將 item 和 物理仿真行為進(jìn)行關(guān)聯(lián)蒲障。
*/
UIGravityBehavior* gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:@[aView]];
// 3. 創(chuàng)建物理仿真動(dòng)畫的管理者 animator
/*
1. referenceView 主要是用來(lái)提供一個(gè) Behavior 執(zhí)行參照的坐標(biāo)系
2. beahvior 將物理仿真行為和動(dòng)畫管理者進(jìn)行關(guān)聯(lián)
*/
UIDynamicAnimator* animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
[animator addBehavior:gravityBeahvior];
// 由于動(dòng)畫的執(zhí)行是需要時(shí)間的歹篓, 對(duì)動(dòng)畫管理者進(jìn)行引用避免動(dòng)畫管理者銷毀。
self.animator = animator;
}
@end
注意點(diǎn):
學(xué)習(xí)的博客地址
WWDC 2013 Session筆記 - UIKit Dynamics入門
UIKit Dynamics 教程:拋擲 Views