iOS 仿射變換(CGAffineTransform)

joker_king發表於2018-12-20

#建立一個CGAffineTransform 使用如下幾個函式可以幫我們快速建立一個CGAffineTransform

//平移
CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)
//縮放
CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
//旋轉
CGAffineTransformMakeRotation(CGFloat angle)
複製程式碼

我們來做一個圖形的簡單旋轉 我們的需求是,將一個圖形旋轉45度。

CALayer *MamiLayer = [CALayer layer];
MamiLayer.backgroundColor = [UIColor redColor].CGColor;
MamiLayer.bounds = CGRectMake(0, 0, 100, 100);
MamiLayer.position = CGPointMake(self.view.frame.size.width / 2, self.view.frame.size.height /2);
    
[self.view.layer addSublayer:MamiLayer];
    
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_4);
MamiLayer.affineTransform = transform;
複製程式碼

#混合變換 如果我們不僅需要旋轉,還需要平移和縮放呢?,這時候單一的變換已經不能滿足我們的需求了。 混合變換就應用而生 下面我們來看一段程式碼

//混合變換
CGAffineTransform identity = CGAffineTransformIdentity;
identity = CGAffineTransformTranslate(identity, 100, 0);//執行平移操作
identity = CGAffineTransformScale(identity, .5, .5);//執行縮放操作
identity = CGAffineTransformRotate(identity, M_PI_4);//執行旋轉操作
        
MamiLayer.affineTransform = identity;
複製程式碼

當使用混合變換的時候,初始,我們需要建立一個空矩陣,系統為我們提供了一個快捷的方法,可以讓我們快速的建立一個空矩陣。

CGAffineTransform identity = CGAffineTransformIdentity;
複製程式碼

當在使用混合變換的時候,一定要注意放射變換之間的影響,程式碼從上至下執行,我們一定要儘可能的減少變換之間的影響。

相關文章