今天要教一個很酷的動畫效果:UIKit Dynamic。

這種動畫效果能讓您的 UIView 受重力影響。

 

這種效果很容易做,要先

  1. 產生 UIDyanmicAnimator 來做動畫的效果。
  2. 生成 UIDynamicBehavior 代表要表現什麼樣的行為,(可能要表現重力行為、碰撞行為等等。)
  3. 產生要做動畫的 UIView。

 

設定的話,

  1. 把需要表現行為的物件加到 UIDynamicBehavior,
  2. 再把要表現的行為加到 UIDyanmicAnimator,

物件就會做出各種不同的效果。

 

***** 加入重力效果 *****

請看下面的程式碼:

UIKitDynamics01

  1. 上面的程式碼先產生一個紅色的 UIView,存在常數 redBox 裡面。
  2. 產生 UIDyanmicAnimator、UIGravityBehavior,把要做動畫的 redBox 加到行為中,

把重力行為加到 UIDyanmicAnimator,紅色物件就會受到重力影響往下掉。

 

***** 加入碰撞效果 *****

目前紅色四方形受到重力往下掉、直接掉出螢幕以外,如果在之前程式碼的下面,加入下面的程式碼,就可以阻擋紅色四方形掉出螢幕的外面。

UIKitDynamics02

程式碼的意思是,

  1. 先產生阻擋紅色四方形向下墜落的 UIView,命名成 blueBar。
  2. 產生 UICollisionBehavior,這是碰撞的行為。
  3. 把 redBox 加入 UICollisionBehavior,
  4. 再用 addBoundaryWithIdentifier 方法,將 blueBar 轉換成碰撞時的邊界。
  5. 最後再把 UICollisionBehavior 加到 UIDyanmicAnimator,藍色四方形就會阻擋紅色四方形往下掉。

 

***** 畫面上的四邊當作邊際 *****

除了加入 UIView,當作碰撞行為的邊際以外,還可以透過設定,把畫面的四個邊際當成 Boundary:

UIKitDynamics03

如上程式碼,

  1. 先把藍色四方形的程式碼刪掉。
  2. 使用 UICollisionBehavior 的 translatesReferenceBoundsIntoBoundary,

設定為true,就可以把畫面的四個邊際當成Boundary,紅色四方形就掉落停止在螢幕的下方。

 

***** Snap 行為 *****

除了重力與碰撞,UIKit Dynamics 還提供 snap (吸到某一點)的行為:

UIKitDynamics04

使用方法很簡單,

  1. 生成 UISnapBehavior 的時候,第一個參數填入那個物件要做效果,第二個參數填入要吸附到哪一點。
  2. 設定好了之後,把 UISnapBehavior 行為加到 UIDyanmicAnimator。紅色的 UIView,就會吸附到指定的位置。

 

***** 實際上使用 *****

當然實際開發應用程式的過程中,不可能都是簡單的 UIView。好消息是:幾乎所有的元件,都是 UIView 的子類別,所以都可以使用 UIKit Dynamics 提供的各種效果。

UIKitDynamics05

上面的程式碼,利用UIKit Dynamics 讓顯示 Hello World 的訊息方塊跳到畫面的中間,按下按鈕,又會以 snap 的方式離開畫面。以上就是 UIKit Dynamics 的簡單介紹。

 

相關連結

******************************************

最簡單最快速的 iPhone 開發課程(無經驗也適用) [課程連結]

如何設定漸層顏色 [教學連結]

Swift 和 ObjectiveC 語言混用的方法 [教學連結]

(537)

superstardj

been a DJ, a rapper, a musician and a recording artist... a novel-writer, a language-book author, and a chief editor... a painter, a book-cover designer and many more... right now a programmer who designs mobile application, both iOS and Android devices...

2 thoughts on “[Swift] UIKit Dynamics:做出受重力影響的畫面

台北市青少年發展處 - | Reply

你好,

這邊是台北市青少年發展處,主要在推廣青少年有興趣的課餘活動
因網頁上並無您的E-mail,因此留言給您
想先與您這邊聯繫是否有意願來本處上關於corona SDK課程

    superstardj - | Reply

    我有意願來教青少年做App。已寄信到您的 email~

Leave a Reply

Your email address will not be published. Required fields are marked *