transform属性

transform矩阵计算原理:
https://www.jianshu.com/p/6b799eeee8dd
https://www.cnblogs.com/delonchen/archive/2011/08/03/iostransform.html

ad对应缩放,bc对应旋转,tx,ty对应位移

大部分的教程说,公式可以总结为
x = ax+cy+tx
y = bx+dy+ty

transform可以办到控件的平移,旋转,缩放。
每种效果都对应着两个方法
CGAffineTransform带make与不带make区别?

1.带make相对的最原始的位置做形变操作(一般只用做一次形变)
2.不带make是相对于指定的形变开始进行,相对于上一次操作(一般用于做多次形变.)

- (IBAction)transform:(id)sender {
    [UIView animateWithDuration:0.5 animations:^{
        //平移
        /**
         CGAffineTransform带make与不带make区别?
         1.带make相对的最原始的位置做形变操作.(一般只用做一次形变.)
         
         不带make是相对于指定的形变开始进行.
         相对于上一次操作(一般用于做多次形变.)
         */
    
        //self.imageV.transform = CGAffineTransformMakeTranslation(0, 300);
        //self.imageV.transform = CGAffineTransformTranslate(self.imageV.transform, 0, 100);
        
        // 清除平移,让每次平移都是相对上一次的位置
          //[pan setTranslation:CGPointZero inView:self.imageView];
  
        //旋转
        //参数:旋转的角度(是弧度)
        //self.imageV.transform = CGAffineTransformMakeRotation(M_PI);
        ///self.imageV.transform = CGAffineTransformRotate(self.imageV.transform, M_PI_2);
            // 复位,只要想相对于上一次旋转就复位
      // [rotation setRotation:0];
        
        
        //缩放
        //缩放比例(1代表是原始大小.)
        //self.imageV.transform = CGAffineTransformMakeScale(1.5, 1.5);
        //self.imageV.transform = CGAffineTransformScale(self.imageV.transform, 1.5, 1.5);
        self.imageV.transform = CGAffineTransformScale(self.imageV.transform, 0.8, 0.8);
        // 复位,只要相当于上一次的缩放
       // [pinch setScale:1];
        
    }];
  
   
}

使用transform实现屏幕上View随手指移动,实现思路:
1、先要监听到view上面手指的Touch事件
2、获取到手指Touch的当前点和上一个点的坐标(手指相对当前view的坐标),并算出水平方向和垂直方向的偏移;
3、使用transform属性,实现view的平移

//当触摸移动时调用
//NSArray:集合里面存入的元素都是有序的
//NSArray:集合里面存入的元素都是无序的
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"%s",__func__);
    
    
    //获取UITouch对象
    UITouch *touch = [touches anyObject];
    
    //上一个点:prePoint
    //当前点:curPoint 手指在红色view上面Touch的坐标(根据控件本身来讲的)
    //获取上一点
    CGPoint preP = [touch previousLocationInView:self];
    //获取当前点
    CGPoint cur = [touch locationInView:self];
    
    NSLog(@"preP = %@",NSStringFromCGPoint(preP));
    NSLog(@"cur = %@",NSStringFromCGPoint(cur));
    
    //x偏移量 = 当前点.x – 上一个点的.x
    CGFloat offsetX = cur.x - preP.x;
    //y偏移量 = 当前点.y – 上一个点的.y
    CGFloat offsetY = cur.y - preP.y;
    
    //让当前View跟着手指移动
    //Transform->平移
    self.transform = CGAffineTransformTranslate(self.transform, offsetX, offsetY);
    
    
}

注意:UITouch对象,一根手指触摸屏幕就会产生一个UITouch对象,单指操作,(NSSet *)touches这个集合中只会有一个UITouch对象

你可能感兴趣的:(transform属性)