iOS 手势

- (void)viewDidLoad {


    [super viewDidLoad];
    
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgroundTapped)];
    
    [self.view addGestureRecognizer:tap];
    
    
    
    _myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    
    _myView.center = self.view.center;
    
    _myView.backgroundColor = [UIColor redColor];
    
    [self.view addSubview:_myView];
    
    
    //UIGestureRecognizer  手势识别器,能够把所在的view上的touch事件识别为相应的手势。
    //这个类不能直接使用,需要使用它的各种子类。
   
    
    

    单击手势

    //创建手势时,需要制定target和方法,那么在手势触发时,就会调用绑定的方法。
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognized:)];
    
    //触发手势所需要的点击次数。
    tapGesture.numberOfTapsRequired = 1;
    
    //触发手势所需要的触摸点数。
    tapGesture.numberOfTouchesRequired = 1;
    
    //把手势识别器添加到view上,view上的touch时间就会被识别。
    [_myView addGestureRecognizer:tapGesture];
    
  
    

    双击手势

    UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapGestureRecognized:)];
    
    //触发手势所需要的点击次数。
    doubleTapGesture.numberOfTapsRequired = 2;
    
    //触发手势所需要的触摸点数。
    doubleTapGesture.numberOfTouchesRequired = 1;
    
    //把手势识别器添加到view上,view上的touch时间就会被识别。
    [_myView addGestureRecognizer:doubleTapGesture];
    
    //tapGesture手势必须在doubleTapGesture手势识别失败时才能被识别。
    [tapGesture requireGestureRecognizerToFail:doubleTapGesture];
    
   

   长按手势

    
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureRecognized:)];
    
    //触发长按手势的按压时间
    longPress.minimumPressDuration = 0.5;
    
    //手势触发前最大的允许移动距离。
    longPress.allowableMovement = 10;
    
    [_myView addGestureRecognizer:longPress];
    
  
    

    捏合手势

    
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGestureRecognized:)];
    
    [_myView addGestureRecognizer:pinch];
    
   

    旋转手势

    
    UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGestureRecognized:)];
    
    //手势也可以设置代理
    rotation.delegate = self;
    
    [_myView addGestureRecognizer:rotation];
    
   

    滑动手势

    
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognized:)];
    
    [_myView addGestureRecognizer:pan];
    

}


//当另外一个手势也可能触发时,调用此方法,返回YES,允许同时触发,返回NO不允许同时触发。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}

单击手势方法
- (void)tapGestureRecognized:(UITapGestureRecognizer *)gesture{
    NSLog(@"点击了");
}


双击手势方法

- (void)doubleTapGestureRecognized:(UITapGestureRecognizer *)gesture{
    NSLog(@"双击了");
}


长按手势方法

- (void)longPressGestureRecognized:(UILongPressGestureRecognizer *)gesture{
    //gesture.state手势的状态。
    if (gesture.state == UIGestureRecognizerStateBegan) {
        NSLog(@"长按了");
        
        //菜单控制器,单例类
        UIMenuController *mc = [UIMenuController sharedMenuController];
        
        UIMenuItem *redItem = [[UIMenuItem alloc] initWithTitle:@"红色" action:@selector(redItemClick)];
        UIMenuItem *greenItem = [[UIMenuItem alloc] initWithTitle:@"绿色" action:@selector(greenItemClick)];
        UIMenuItem *blueItem = [[UIMenuItem alloc] initWithTitle:@"蓝色" action:@selector(blueItemClick)];
        
        mc.menuItems = @[redItem,greenItem,blueItem];
        
        //UIMenuController所在的view必须能够成为第一响应者,而普通的UIView不能成为第一响应者,所以UIMenuController必须显示在自定义view上。
        [self.view becomeFirstResponder];
        
        //设置菜单控制器显示的位置和父视图。
        [mc setTargetRect:_myView.frame inView:self.view];
        
        //让菜单控制器显示
        [mc setMenuVisible:YES animated:YES];
        
    }
    
}


捏合手势方法

- (void)pinchGestureRecognized:(UIPinchGestureRecognizer *)gesture{
    
    _myView.transform = CGAffineTransformScale(_myView.transform, gesture.scale, gesture.scale);
    
    gesture.scale = 1;
    
}


旋转手势方法

- (void)rotationGestureRecognized:(UIRotationGestureRecognizer *)gesture{
    
    _myView.transform = CGAffineTransformRotate(_myView.transform, gesture.rotation);
    
    gesture.rotation = 0;
}

滑动手势方法
- (void)panGestureRecognized:(UIPanGestureRecognizer *)gesture{
    
    CGPoint point = [gesture translationInView:self.view];
    
    _myView.center = CGPointMake(_myView.center.x+point.x, _myView.center.y+point.y);
    
    [gesture setTranslation:CGPointZero inView:self.view];
    
}


- (void)redItemClick{
    _myView.backgroundColor = [UIColor redColor];
    [self.view resignFirstResponder];
}

- (void)greenItemClick{
    _myView.backgroundColor = [UIColor greenColor];
    [self.view resignFirstResponder];
}

- (void)blueItemClick{
    _myView.backgroundColor = [UIColor blueColor];
    [self.view resignFirstResponder];
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值