Core Animation:變換

二維空間上的變換

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

三維空間上的變換

通過設置CALayertransform屬性,可以實現(xiàn)三維空間上的變換。transformCATransform3D類型。可以通過如下幾個函數(shù)快速生成:

  • CATransform3DMakeRotation(CGFloat angle, CGFloat x, CGFloat y, CGFloat z)
  • CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz)
  • CATransform3DMakeTranslation(Gloat tx, CGFloat ty, CGFloat tz)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容