iOS 手势处理

UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapView)];
tap.delegate = self;
[view addGestureRecognizer:tap];
/**
 *  当点击view的时候,会先调用这个方法
 */
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    CGPoint pos = [touch locationInView:touch.view];
    if (pos.x <= self.iconView.frame.size.width * 0.3) {
        return YES;
    }
    return NO;
}

/**
 *  是否允许多个手势识别器同时有效
 */
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}


// 点击手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
// 连续敲击2次,手势才能识别成功
tap.numberOfTapsRequired = 2;
tap.numberOfTouchesRequired = 2;
// 2.添加手势识别器对象到对应的view
[self.testView addGestureRecognizer:tap];
// 3.添加监听方法(识别到了对应的手势,就会调用监听方法)
[tap addTarget:self action:@selector(tapView)];

// 长按
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] init];
[longPress addTarget:self action:@selector(longPressView)];
// 最少长按2秒
longPress.minimumPressDuration = 2;
// 30px范围内长按,才会触发长按事件
longPress.allowableMovement = 30;
[self.testView addGestureRecognizer:longPress];

// 滑动
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeView)];    
// 向上滑动
swipe.direction = UISwipeGestureRecognizerDirectionUp;    
[self.testView addGestureRecognizer:swipe];


// 捏合手势 
- (void)testPinch
{
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)];
    pinch.delegate = self;
    [self.testView addGestureRecognizer:pinch];
}

- (void)pinchView:(UIPinchGestureRecognizer *)pinch
{
    pinch.view.transform = CGAffineTransformScale(pinch.view.transform, pinch.scale, pinch.scale);
    pinch.scale = 1; // 这个真的很重要!!!!!
}


// 旋转手势 
- (void)testRotate
{
    UIRotationGestureRecognizer *recognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateView:)];
    recognizer.delegate = self;
    [self.testView addGestureRecognizer:recognizer];
}

- (void)rotateView:(UIRotationGestureRecognizer *)recognizer
{
    recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
    recognizer.rotation = 0; // 这个很重要!!!!!
}


// 拖拽
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];
[self.testView addGestureRecognizer:pan];

- (void)panView:(UIPanGestureRecognizer *)pan
{
    switch (pan.state)
     {
        case UIGestureRecognizerStateBegan: // 开始触发手势
            break;
        case UIGestureRecognizerStateEnded: // 手势结束
            break;
        default:
            break;
    }
    
    // 在view上面挪动的距离
    CGPoint translation = [pan translationInView:pan.view];
    CGPoint center = pan.view.center;
    center.x += translation.x;
    center.y += translation.y;
    pan.view.center = center;
    
    // 清空移动的距离
    [pan setTranslation:CGPointZero inView:pan.view];
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值