免费开源的iOS开发学习平台

UIGestureRecognizer手势 : 3-捏合手势与旋转手势

借助捏合手势(UIPinchGestureRecognizer)可以使图片进行放大和缩小,而旋转手势(UIRotationGestureRecognizer)可以对图片的角度进行旋转。捏合手势类与旋转手势类中分别定义了用于缩放的比例以及旋转的角度,通过这些参数并结合UIView类的transform属性就可以实现对UI控件的手势缩放与旋转。

捏合手势与旋转手势简介

捏合手势UIPinchGestureRecognizer可以获取手势在屏幕坐标系中的缩放比例,根据该缩放比例,可以调整UIView控件的缩放。

@property (nonatomic) CGFloat scale;

旋转手势UIRotationGestureRecognizer可以获取手势在屏幕坐标系中的旋转角度,根据该旋转角度,可以调整UIView控件的角度。

@property (nonatomic) CGFloat rotation;

捏合手势示例代码

下方的示例代码中创建了一个捏合手势对象,并添加到了一个UIImageView对象上,可以实现对一张图片进行缩放操作。通过捏合手势对象中的scale参数,我们可以获取缩放的比例。

  • 创建一个Single View Application应用,在ViewController.m文件中添加如下代码。
- (void)viewDidLoad {
    [super viewDidLoad];
    //创建UIImageView对象
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 250, 150, 150)];
    imageView.image = [UIImage imageNamed:@"99logo"];
    imageView.userInteractionEnabled = YES;
    [self.view addSubview:imageView];
    //捏合手势
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];
    //添加到imageView
    [imageView addGestureRecognizer:pinchGesture];
}
  • 添加pinch:方法,实现图片缩放功能
-(void) pinch:(UIPinchGestureRecognizer *) gesture {
    NSLog(@"%s, 缩放比例: %f",__func__,gesture.scale);
    CGFloat scale = gesture.scale;
    gesture.view.transform = CGAffineTransformScale(gesture.view.transform, scale, scale);
    //一定要把scale的值重置为1,否则会影响缩放效果,即缩放比例会在上一次基础上进行缩小/放大
    gesture.scale = 1;
}

在模拟器运行时,按住option键可以调出捏合手势操作。执行捏合操作时,可以实现图片的缩放,并且可以打印出缩放的比例。

旋转手势功能实现

下方的示例代码中创建了一个旋转手势对象,并添加到了UIImageView对象上,可以实现对一张图片进行旋转操作。通过旋转手势对象中的rotation参数,我们可以获取旋转的角度。

  • 创建一个Single View Application应用,在ViewController.m文件中添加如下代码。
- (void)viewDidLoad {
    [super viewDidLoad];
    //创建UIImageView对象
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 250, 150, 150)];
    imageView.image = [UIImage imageNamed:@"99logo"];
    imageView.userInteractionEnabled = YES;
    [self.view addSubview:imageView];
    //旋转手势
    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];
    [imageView addGestureRecognizer:rotationGesture];
}
  • 添加ratation:方法,实现图片旋转功能
-(void) rotation:(UIRotationGestureRecognizer *) gesture {
    NSLog(@"%s, rotation:%f, velocity:%f",__func__,gesture.rotation,gesture.velocity);
    CGFloat rotation = gesture.rotation;
    self.imageView.transform = CGAffineTransformRotate(gesture.view.transform, rotation);
    //一定要把rotation的值重置为0,否则会影响旋转效果
    gesture.rotation = 0;
}

示例代码

https://github.com/99ios/8.4.3