手势

手势识别器是对触摸事件做了封装,手势识别器本身起到 了识别作用。
手势识别器是iOS中比较抽象的一个类,用于识别一个手 势,所谓手势:有规律的触摸。
 
手势分类:
轻拍手势、长按手势
平移手势、轻扫手势
缩放手势、旋转手势
屏幕边界平移手势
 
系统提供的⼿势识别器这个抽象⽗类我们是不会直接使⽤的,⽽是根据需 求使⽤特定的⼿势识别器创建对象,系统所提供的⼿势类型如下所⽰:
 
1.UITapGestureRecognizer是轻拍⼿势识别器,能识别轻拍操作
2.UILongPressGestureRecognizer是长按⼿势识别器,能识别长按操作
3.UIRotationGestureRecognizer是旋转⼿势识别器,能识别旋转操作
4.UIPinchGestureRecognizer是捏合⼿势识别器,能识别捏合操作
5.UIPanGestureRecognizer是平移⼿势识别器,能识别拖拽操作
6.UISwipeGestureRecognizer是轻扫⼿势识别器,能识别拖拽操作
7.UIScreenEdgePanGestureRecognizer是屏幕边缘轻扫识别器
 
应用步骤:
1.创建UIXXXGestureRecognizer对象,使⽤initWithTarget:action:⽅法
2.配置要识别的⼿势的相关信息
3.将⼿势添加到某个视图上
4.实现⼿势识别器⾥定义的⽅法
 
transform是view的⼀个重要属性,它在矩阵层⾯上改变view的显⽰状态, 能实现view的缩放、旋转、平移等功能
平移:CGAffineTransformMakeTranslation
缩放:CGAffineTransformMakeScale
旋转:CGAffineTransformMakeRotation
 
- (void)viewDidLoad {
    [super viewDidLoad];
   
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 50, 320, 500)];
    imageView.image = [UIImage imageNamed:@"love.jpg"];
    imageView.userInteractionEnabled = YES;
   
    //1、创建满足需求的手势,在创建时关联手势触发时的方法
    //2、配置手势的相关属性
    //3、将手势添加到需要执行操作的视图上面
    //4、实现手势方法,当触摸发生,手势识别器识别到相对应的触摸时,就会执行关联的方法。
   
    //轻拍手势 UITapGestureRecognizer
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
   
    //设置属性
    //1、触发手势的手指个数
    tap.numberOfTouchesRequired = 1;
    //2、触发手势的轻拍次数
    tap.numberOfTapsRequired = 2;
    //让imageView添加轻拍手势
    [imageView addGestureRecognizer:tap];
    [tap release];
   
    //轻扫手势 UISwipeGestureRecognizer
    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeAction:)];
   
    //指定清扫的方向
    swipe.direction = UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft;
    [imageView addGestureRecognizer:swipe];
    [swipe release];
   
   
    //长按手势 UILongPressGestureRecognizer
    UILongPressGestureRecognizer *longpress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longpressAction:)];
   
    //长按手势触发的最短时间,默认是0.5
    longpress.minimumPressDuration = 3.0;
    [imageView addGestureRecognizer:longpress];
    [longpress release];
 
    //缩放 UIPinchGestureRecognizer
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)];
    [imageView addGestureRecognizer:pinch];
    [pinch release];
   
    //旋转 UIRotationGestureRecognizer
    UIRotationGestureRecognizer *rotate = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateAction:)];
    [imageView addGestureRecognizer:rotate];
    [rotate release];
   
    //平移 UIPanGestureRecognizer
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
    [imageView addGestureRecognizer:pan];
    [pan release];
   
    [self.view addSubview:imageView];
   
    [imageView release];
   
    // Do any additional setup after loading the view.
}
 
- (void)panAction:(UIPanGestureRecognizer *)pan {
    //获取想要平移的视图
    UIImageView *imageView = (UIImageView *)pan.view;
   
    CGPoint p = [pan translationInView:imageView];
   
    //改变视图的形变属性
    imageView.transform = CGAffineTransformTranslate(imageView.transform, p.x, p.y);
   
    [pan setTranslation:CGPointZero inView:imageView];
}

- (void)rotateAction:(UIRotationGestureRecognizer *)rotate {
    //获取想要旋转的视图
    UIImageView *imageView = (UIImageView *)rotate.view;
   
    //改变imageView的形变属性
    imageView.transform = CGAffineTransformRotate(imageView.transform, rotate.rotation);
    rotate.rotation = 0;
   
//    imageView.transform =     CGAffineTransformMakeRotation(rotate.rotation);
}

- (void)pinchAction:(UIPinchGestureRecognizer *)pinch {
    //获取要进行缩放的视图
    UIImageView *imageView = (UIImageView *)pinch.view;
   
    //改变imageView的形变属性
    imageView.transform = CGAffineTransformScale(imageView.transform, pinch.scale, pinch.scale);
    pinch.scale = 1;
   
//    imageView.transform = CGAffineTransformMakeScale(pinch.scale, pinch.scale);
}

- (void)longpressAction:(UILongPressGestureRecognizer *)longpress {
    //获取手势关联的视图
    UIImageView *imageView = (UIImageView *)longpress.view;
   
    //修改图片
    [imageView setImage:[UIImage imageNamed:@"mao.jpg"]];
}

- (void)swipeAction:(UISwipeGestureRecognizer *)swipe {
    //获取手势关联的视图
    UIImageView *imageView = (UIImageView *)swipe.view;
   
    //修改图片
    [imageView setImage:[UIImage imageNamed:@"mao.jpg"]];
}

- (void)tapAction:(UITapGestureRecognizer *)tap {
    //获取手势关联的视图
    UIImageView *imageView = (UIImageView *)tap.view;
   
    //修改图片
    [imageView setImage:[UIImage imageNamed:@"mao.jpg"]];
}
原文地址:https://www.cnblogs.com/Walking-Jin/p/5210798.html