各种手势使用

Touch触摸
// 碰到屏幕就会触发该方法

  • (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
    NSLog(@"触碰到了");
    UITouch *touch = [touches anyObject];
    // 获取点击坐标
    CGPoint point = [touch locationInView:self.view];
    NSLog(@"%f, %f", point.x, point.y);
    }
    Tap点按
    UITapGestureRecognizer *doubleTgr = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doubleTagr:)];
    // 点击的次数
    //doubleTgr.numberOfTapsRequired = 2;
    [self.imageView addGestureRecognizer:doubleTgr];
    LongPress长按
    UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(lpgrStart:)];
    [self.imageView addGestureRecognizer:lpgr];
    Swipe轻扫
    // 由于轻扫只能识别一个方向,所以把他的四个方向放在一个数组里留着以后辨别,这样就能识别四个方向了
    NSArray *arr = @[[NSNumber numberWithUnsignedInteger:UISwipeGestureRecognizerDirectionDown],[NSNumber numberWithUnsignedInteger:UISwipeGestureRecognizerDirectionUp],[NSNumber numberWithUnsignedInteger:UISwipeGestureRecognizerDirectionLeft],[NSNumber numberWithUnsignedInteger:UISwipeGestureRecognizerDirectionRight]];
    for (int i=0; i UISwipeGestureRecognizer *swiper = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swiper:)];
    //把方向取出来
    NSNumber *direction = arr[i];
    // 把方向转为Integer类型赋给轻扫的方向
    swiper.direction = [direction unsignedIntegerValue];
    [self.imageView addGestureRecognizer:swiper];
    }
  • (void)swiper:(UISwipeGestureRecognizer *)swiper
    {
    if (swiper.direction == UISwipeGestureRecognizerDirectionDown) {
    NSLog(@"向下");
    }
    if (swiper.direction & UISwipeGestureRecognizerDirectionLeft) {
    NSLog(@"向左");
    }
    if (swiper.direction & UISwipeGestureRecognizerDirectionRight) {
    NSLog(@"向右");
    }
    if (swiper.direction & UISwipeGestureRecognizerDirectionUp) {
    NSLog(@"向上");
    }
    }
    Rotation旋转
    // 创建一个手势
    UIRotationGestureRecognizer *rotion = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotion:)];
    // 手势添加在控件上
    [self.imageView addGestureRecognizer:rotion];
  • (void)rotion:(UIRotationGestureRecognizer *)rotion
    {
    NSLog(@"%f", rotion.rotation);
    rotion.view.transform = CGAffineTransformRotate(rotion.view.transform, rotion.rotation);
    // 由于此方法是旋转过程中反复调用的,所以旋转弧度很容易叠加,要及时清零才正常一点
    rotion.rotation = 0;
    }
    Pinch捏合
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinch:)];
    [self.imageView addGestureRecognizer:pinch];
  • (void)pinch:(UIPinchGestureRecognizer *)pinch
    {
    // 放大缩小的比例
    NSLog(@"%f", pinch.scale);

    pinch.view.transform = CGAffineTransformScale(pinch.view.transform, pinch.scale, pinch.scale);
    // 把伸缩比例及时变为1,防止伸缩效果叠加
    pinch.scale = 1;
    }
    Pan拖拽
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(pan:)];
    [self.imageView addGestureRecognizer:pan] ;

  • (void)pan:(UIPanGestureRecognizer *)pan
    {
    // 记录原来的位置
    static CGPoint center;

    if (pan.state == UIGestureRecognizerStateBegan) {
    center = pan.view.center;
    }

    // 获取偏移量
    CGPoint point = [pan translationInView:self.view];
    // 最后拖拽手势所在view的中心点,就是原来的位置加上变动的位置
    pan.view.center = CGPointMake(center.x + point.x, center.y + point.y);
    }
    Double手势叠加
    //可以添加多个手势
    // 一个控件可以添加多个手势,但一个手势不能添加在多个控件上
    添加多个手势时要遵守协议

// 返回yes,允许同时添加多个手势

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    {
    return YES;
    }

你可能感兴趣的:(各种手势使用)