UIGesture手势高级:UIPinchGestureRecognizer捏合手势、UIRotationGestureRecognizer旋转手势

UIPinchGestureRecognizer捏合手势

  • alloc
  • initWithTarget
  • imageView.transform = CGAffineTransformScale(iView.transform, pinch.scale, pinch.scale);
    // 对图像视图对象进行矩阵变换计算并赋值
    // CGAffineTransformScale通过缩放的方式产生一个新的矩阵
    //P1:原来的矩阵
    //P2:x方向上的缩放比例
    //P3:y方向上的缩放比例
  • 协议方法
  • shouldRecognizeSimultaneouslyWithGestureRecognizer是否可以同时响应两种手势

UIRotationGestureRecognizer旋转手势

  • alloc
  • initWithTarget
  • imageView.transform = CGAffineTransformRotate(iView.transform, rot.rotation);

具体使用:让一个图像视图支持缩放和旋转手势
主要代码如下

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    UIImage* image = [UIImage imageNamed:@"icon1"];
    UIImageView* iView = [[UIImageView alloc]initWithImage:image];
    iView.frame = CGRectMake(100, 200, 150, 150);
    //打开图像视图支持交互的开关
    iView.userInteractionEnabled = YES;
    [self.view addSubview:iView];
    //创建捏合手势对象
    _pinchGes = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAct:)];
    [iView addGestureRecognizer:_pinchGes];
    //创建旋转手势
    _rotGes = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotAct:)];
    [iView addGestureRecognizer:_rotGes];
    
    _rotGes.delegate = self;
    _pinchGes.delegate = self;
}
//协议方法:是否可以同时响应两个手势
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}
-(void)rotAct:(UIRotationGestureRecognizer *)rot{
    UIImageView* iView = (UIImageView *)rot.view;
    //计算旋转的变换矩阵并且赋值
    iView.transform = CGAffineTransformRotate(iView.transform, rot.rotation);
    //旋转角度清零
    rot.rotation = 0;
}

-(void)pinchAct:(UIPinchGestureRecognizer *)pinch{
    //获取监控视图图像
    UIImageView* iView = (UIImageView *)pinch.view;
    //对图像视图对象进行矩阵变换计算并赋值
    //CGAffineTransformScale通过缩放的方式产生一个新的矩阵
    //P1:原来的矩阵
    //P2:x方向上的缩放比例
    //P3:y方向上的缩放比例
    iView.transform = CGAffineTransformScale(iView.transform, pinch.scale, pinch.scale);
    
    //将缩放值归位为单位值,由于响应函数是在每个瞬间都调用的(不管手指是否有滑动)
    //如果不归零,缩放后保持手指触屏位置不变时,图片也会一直按照上一次缩放的比例继续缩放。
    //scale=1原来的大小
    pinch.scale = 1;
}

你可能感兴趣的:(UIGesture手势高级:UIPinchGestureRecognizer捏合手势、UIRotationGestureRecognizer旋转手势)