二維空間上的變換
UIViwe可以通過屬性transform
進行變換,但它實際上只是封裝了內部圖層的變換。圖層與之對應的屬性是affineTransform
。它們的類型都是CGAffineTransform
。設置這個屬性,可以進行二維空間上的旋轉、縮放和平移。
可以快速生成CGAffineTransform
類型的函數(shù):
CGAffineTransformMakeTranslation(CGFloat angle)
CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
-
CGAffineTransformMakeRotation(CGFloat angle)
它們分別可以進行平移、縮放和旋轉的操作。效果如下:
(圖一)CGAffineTransformMakeScale(70, 70)
(圖二)CGAffineTransformMakeScale(0.5, 0.5)
(圖三)CGAffineTransformMakeRotation(3.14)
還可以利用下面的方法混合不同的變化(CGAffineTransformIdentity
為單位矩陣):
CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty)
CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)
CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy)
CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2)
需要注意的是,混合不同的變化時,后面的變化會收到前面變化的影響。例如
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformRotate(transform, 1.0/3*3.14);
transform = CGAffineTransformTranslate(transform, 200, 0);
view.transform = transform;
效果為
(圖四)先旋轉后平移
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, 200, 0);
transform = CGAffineTransformRotate(transform, 1.0/3*3.14);
view.transform = transform;
效果為
(圖五)先平移后旋轉
水平方向的位移受到了旋轉變換的影響。最終,水平方向的位移為(cos 1.0/3*3.14)*200,垂直方向的位移為(sin 1.0/3*3.14)*200
三維空間上的變換
通過設置CALayer
的transform
屬性,可以實現(xiàn)三維空間上的變換。transform
為CATransform3D
類型。可以通過如下幾個函數(shù)快速生成:
CATransform3DMakeRotation(CGFloat angle, CGFloat x, CGFloat y, CGFloat z)
CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz)
CATransform3DMakeTranslation(Gloat tx, CGFloat ty, CGFloat tz)