transform我們一般稱為形變屬性,其本質是通過矩陣變化改變控件的大小、位置、角度等,這里我們通過一個例子來看一下具體的操作,在下面的例子中我們也會看到UIImageView控件的常用操作。
- (void)viewDidLoad { [super viewDidLoad]; self.redView = [[UIView alloc]initWithFrame:CGRectMake(100, 200, 100, 100)]; self.redView.backgroundColor = [UIColor redColor]; [self.view addSubview:self.redView]; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self Translate]; } //旋轉 - (void)Rotate{ self.redView.transform = CGAffineTransformRotate(self.redView.transform, M_PI_4); } //縮放 - (void)Scale{ self.redView.transform = CGAffineTransformScale(self.redView.transform, 0.5, 0.5); } //移動 - (void)Translate{ self.redView.transform = CGAffineTransformTranslate(self.redView.transform, 0, 50); }
- 獲得CGAffineTransform有多種方法,例如使用CGAffineTransformMake,但是對於矩陣操作相對比較麻煩,事實上iOS已經為我們准備好了三個方法:CGAffineTransformMakeRotation(旋轉)、CGAffineTransformMakeScale(縮放)、CGAffineTransformMakeTranslation(移動);
- transform進行旋轉、縮放、移動的時候不是在原來的基礎上增量形變的,因此如果需要持續在原來的基礎上旋轉、縮放、移動那么每次需要在原來的基礎上增加或減少。當然,我們可以定義一個全局變量進行累加,但是事實上iOS已經為我們提供好了三個對應的方法,分別用於在原來的角度、縮放、移動位置的基礎上做出修改:CGAffineTransformRotate、CGAffineTransformScale、CGAffineTransformTranslate;
iOS開發UI篇—transframe屬性(形變)
1. transform屬性
在OC中,通過transform屬性可以修改對象的平移、縮放比例和旋轉角度
常用的創建transform結構體方法分兩大類
(1) 創建“基於控件初始位置”的形變
CGAffineTransformMakeTranslation(平移)
CGAffineTransformMakeScale(縮放)
CGAffineTransformMakeRotation(旋轉)
(2) 創建“基於transform參數”的形變
CGAffineTransformTranslate
CGAffineTransformScale
CGAffineTransformRotate
補充:
在OC中,所有跟角度相關的數值,都是弧度值,180° = M_PI
正數表示順時針旋轉
負數表示逆時針旋轉
提示:由於transform屬性可以基於控件的上一次的狀態進行疊加形變,例如,先旋轉再平移。因此在實際動畫開發中,當涉及位置、尺寸形變效果時,大多修改控件的transform屬性,而不是frame、bounds、center 。