iOS 動畫入門到精通(1.3):縮放

發表於2016-05-18

iOS 動畫入門到精通(1.3):縮放

這一節大家可以學到:

 

1. 前面一節的第一,第二點。

2. UIView 如何新增單擊和雙擊功能

3. 什麼是 Affine Transform

4. 通過 Affine Transform 來實現縮放動畫

 

什麼是 Affine Transformation?

 

影像的變形有很多種,一般來說 Affine Transformation 是2維變化,主要滿足以下兩點:

  1. 任意一個點 A,變形前後都屬於同一條線
  2. 每條線的中點變化後還是中點

 

在iOS 和 Mac OS 開發中,只要看到 Affine 就要記住這是跟 2 維圖形變形有關的,Affine Transform 是一個檢視在2維座標中的一個狀態。大家不用管什麼矩陣圓陣的,只要記住這樣定義的變數,它的預設值是 CGAffineTransformIdentity, 通過改變這個變數的值可以實現縮放,位移和旋轉(下一節介紹)。

 

Affine Transform 縮放

 

每個UIView 都有一個 transform 的屬性,它的預設值就是上面提到的。只要在動畫 block 中改變它的值就可以產生動畫效果。縮放有兩個常用的方法:

 

CGAffineTransformMakeScale(sx, sy)

CGAffineTransformScale(t, sx, xy)

 

sx: x 軸(長)縮放值

sy: y 軸(高)縮放值

t:CGAffineTransform 變數

 

在 Transform 方法中,包括以後的 3D Transform,只要方法名字裡有 ‘Make’ 就是基於預設值的改變,例如, 以下方法把 aView 基於預設狀態變長一倍,變高兩倍:

如果把長度變成原來的一半,高度為原來的40%, 可以這樣:

要注意,以下兩行程式碼執行後不會把檢視 x 和 y 各放大 4 倍,只會各放大 2 倍:

 

因為這是基於預設值放大2倍,不管執行多少次都只是預設值的2倍。

 

那麼現在問題來了,如果有一個UIButton, 每次按一下都比之前的x,y各放大1.5倍如何實現。這時候就得用到:CGAffineTransformScale(t, sx, xy)了

 

可以這樣實現:

這樣每次按button都會比原來放大 1.5×1.5 倍了。

示例程式碼

好了,基礎知識就這麼多,來看看程式碼吧,可以在這裡下載:

 

Swift: http://www.xmartcalc.com/ios-animation/codes/1.3/Animation1.3_Swift.zip

Objective-C:  http://www.xmartcalc.com/ios-animation/codes/1.3/Animation1.3_OC.zip

 

這個程式開始後跟上一節的一樣,每當你單擊螢幕時,紫色的檢視就會放大;當你雙擊螢幕時,就會縮到原來的大小。

 

如果你對小牛哥做的APP感興趣,可以看看這裡:

 

小牛計算器 (打造最牛逼的計算神器:http://www.xmartcalc.com )

https://itunes.apple.com/gb/app/xmart-calculator+/id827740598?mt=8

智慧多翻譯 (3種語音同時翻譯)

https://itunes.apple.com/gb/app/multi-translate/id768642496?mt=8

 

程式碼正式開始:

 

相關文章