在ios 中, Core Graphics 提供了一系列的函數可以在一個變換的基礎上做深層次的變換,如果做一個既要縮放又要旋轉的變換,以下的方法比較實用。
CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy) --放大縮小 CGAffineTransformRotate(CGAffineTransform t, CGFloat angle) --旋轉的角度 CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty) --偏移量:在原始的位置上偏移tx像素和ty像素
具體使用如下:
1. 創建一個CGAffineTransform 的對象
2.設置要處理的過程
3.對於需要處理的對象進行賦值
代碼如下:
//創建CGAffineTransform的對象 CGAffineTransform transform = CGAffineTransformIdentity; //設置 處理對象縮小50% transform = CGAffineTransformScale(transform, 0.5, 0.5); //設置 處理對象旋轉30度角 transform = CGAffineTransformRotate(transform, M_PI / 180.0 * 30); //接着 偏移200像素 transform = CGAffineTransformTranslate(transform, 200, 0); //對需要處理的對象賦值:affineTransform self.imageView.layer.affineTransform = transform;
效果圖如下:
注意的地方:
需要注意的地方:圖片向右邊發生了平移,但並沒有指定距離那么遠 (200像素),另外它還有點向下發生了平移。原因在於當你按順序做了變換,上 一個變換的結果將會影響之后的變換,所以200像素的向右平移同樣也被旋轉了30 度,縮小了50%,所以它實際上是斜向移動了100像素。
這意味着變換的順序會影響最終的結果,也就是說旋轉之后的平移和平移之后的旋 轉結果可能不同。