UIKit Dynamics (一) 概述
UIKit Dynamics (二) 重力
UIKit Dynamics (三) 碰撞
UIKit Dynamics (四) 急停
UIKit Dynamics (五) 施力
為什么要使用 UIKit Dynamics
蘋果已經提供了強大的動畫庫 Core Animation,幾乎可以實現我們想要的全部動畫效果,為什么還要去使用 UIKit Dynamics 呢?
首先,UIKit Dynamics 提供了一套很容易使用的 API,可以用十幾行代碼實現一個復雜的物理動畫,同樣的功能使用 Core Animation 則可能需要上百行。
其次,Core Animation 的面向對象是 CALayer,而 UIKit Dynamics 是面對的 UIView,就如 UIView.animate 動畫 API 的一樣更加直接地操作屏幕上的 view 元素。
UIKit Dynamics 簡介
UIKit Dynamics 是 iOS 7 中引入的新特性,為了提供更接近真實世界效果的動畫,大概可以理解為 UIKit 中的物理引擎。UIKit Dynamics 使用時的架構如下:
Architecture
- 架構中的最頂層是一個 UIDynamicAnimator,只有添加進去的動畫才能執行。創建 UIDynamicAnimator 需要通過一個 ReferenceView,即所有物理規則的容器。
- 創建好的 UIDynamicAnimator 中可以添加多個 UIDynamicBehavior,即物理規則,包括重力,碰撞,彈簧等效果。
- 每個 UIDynamicBehavior 中可以添加過個 UIDynamicItem,即遵循該物理規則的視圖。UIDynamicItem 是一個協議,UIView 和 UICollectionViewLayoutAttributes 都實現了這個協議。
關于 Behavior,UIKit 中最底層的是 UIDynamicBehavior,提供了很多基礎通用的屬性,比如直接設置視圖的速度,或者視圖的材質比如摩擦,彈性等。而在其之上封裝了一些高級的 Behavior,比如:
- UIGravityBehavior:模擬重力,自然下落
- UICollisionBehavior:模擬碰撞,自定義好碰撞邊界即可模擬
- UIAttachmentBehavior:模擬附件,遵循它的視圖運動時會相互影響
- UISnapBehavior:模擬停止?視圖迅速移動到目標點,并在該點進行一個彈簧抖動的動畫
- UIPushBehavior:模擬受力,給視圖一個力讓它運動
后續的文章中將會使用一個 demo 來進行介紹,項目地址