上一節提到產生動畫效果的兩個步驟,第一步是產出Animation的物件實例,第二步是呼叫 withAnimation() 來啟動動畫效果,第二步除了用全域函式withAnimation()之外,也可用視圖修飾語 .animation()。兩個步驟相關參數歸納如下圖:

截圖 2022-03-14 下午12.46.56.png

步驟一要產出Animation物件類型,除了用類型方法(Type method)之外,SwiftUI 也定義了同名的類型屬性(Type property),也就是語法上,用 Animation.linear() 或 Animation.linear 都可以,但後者沒有參數,只能用預設值(如 duration 1秒鐘左右)。

從上圖可以歸納出,要控制Animation動畫行為可利用以下幾個參數,前2個參數在步驟一設定,後4個在步驟二可選擇改變:

  1. 時間曲線(timing curve)
  2. 變化時間(duration)
  3. 是否延遲(delay)
  4. 加速或減速(speed)
  5. 重複多次或無限循環(repeatCount/repeatForever)
  6. 是否倒轉(autoreverses)

若不用循環(repeatCount/repeatForever),則動畫預設只會執行一次。

步驟二用全域函式 withAnimation() 或修飾語 .animation() 啟動動畫效果,兩者語法稍有差異,withAnimation()後面可接匿名函式,.animation() 則只能設定參數,實際用法參考以下範例程式4-1b。

從上面的歸納可以看出,Animation物件跟我們想像中的「動畫片」不完全相同,Animation只是做出我們平常看到的動畫片中,一小段基本的動態效果,甚至可說只是做出兩個視圖畫面之間的銜接過程。

至於視圖畫面實際發生什麼動作,則可透過以下視圖修飾語(View modifier)來完成: