CoreGraphics框架中的CGAffineTransform類可用于設定UIView的transform屬性,控制視圖的縮放、旋轉和平移操作.transform我們一般稱為形變屬性,其本質是通過矩陣變化改變控件的大小、位置、角度等.
- transform進行旋轉、縮放、移動的時候不是在原來的基礎上增量形變的,因此如果需要持續在原來的基礎上旋轉、縮放、移動那么每次需要在原來的基礎上增加或減少。
這些iOS已經為我們提供好了三個對應的方法(可以定義一個全局變量進行累加),
基于transform參數的形變[
CGAffineTransformRotate
、CGAffineTransformScale
、CGAffineTransformTranslate
]相比之前的基于控件初始位置的形變[CGAffineTransformMakeRotation
(旋轉)、CGAffineTransformMakeScale
(縮放)、CGAffineTransformMakeTranslation
(移動)]不會出現復原式的抖動,能停留在改動后的位置.
下面給出一些代碼可以自己操作,看下結果:
pragma mark tap 輕拍
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
//設置手勢相關屬性
//輕拍的次數
tap.numberOfTapsRequired = 1;
//手指數1下
tap.numberOfTouchesRequired = 1;
// [self.view addGestureRecognizer:tap];
//輕拍事件
- (void)tapAction:(UITapGestureRecognizer *)sender{
sender.view.backgroundColor = [UIColor colorWithRed:cKol green:cKol blue:cKol alpha:1];
}
pragma mark swipe 清掃
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction:)];
swipe.direction = UISwipeGestureRecognizerDirectionLeft|UISwipeGestureRecognizerDirectionRight; //"|":表示和的意思.
//[mview addGestureRecognizer:swipe];
//清掃事件
- (void)swipeAction:(UISwipeGestureRecognizer *)sender{
sender.view.backgroundColor = [UIColor colorWithRed:cKol green:cKol blue:cKol alpha:1];
}
pragma mark pan 平移
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
//[mview addGestureRecognizer:pan];
//平移事件
- (void)panAction:(UIPanGestureRecognizer *)sender{
CGPoint piont = [sender translationInView:sender.view];
//三個參數,會發生平移
sender.view.transform = CGAffineTransformTranslate(sender.view.transform, piont.x, piont.y);
//設置增量為0 ;
[sender setTranslation:CGPointZero inView:sender.view];
}
pragma mark pinch 捏合
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchAction:)];
[mview addGestureRecognizer:pinch];
- (void)pinchAction:(UIPinchGestureRecognizer *)sender{
//兩個參數,每次縮放從原始大小開始
//三個參數,每次縮放從上一次縮放的大小開始
sender.view.transform = CGAffineTransformScale(sender.view.transform, sender.scale, sender.scale);
//設置縮放比例(1:正常. <1:縮放. >1:放大)
sender.scale = 0.5;
}
pragma mark rotation 旋轉
UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationAction:)];
[mview addGestureRecognizer:rotation];
}
- (void)rotationAction:(UIRotationGestureRecognizer *)sender{
sender.view.transform = CGAffineTransformRotate(sender.view.transform, sender.rotation);
//清除增量
sender.rotation =0;
}