ios开发手势事件。

 为了完成⼿手势识别,必须借助于⼿手势识别器----UIGestureRecognizer

•利⽤用UIGestureRecognizer,能轻松识别⽤用户在某个view上⾯面做的⼀一些常见⼿手势

 UIGestureRecognizer是⼀一个抽象类,定义了所有⼿手势的基本⾏行为,使⽤用它的⼦子类才 能处理具体的⼿手势

UITapGestureRecognizer(敲击)
UIPinchGestureRecognizer(捏合,⽤用于缩放) ➢ UIPanGestureRecognizer(拖拽)
UISwipeGestureRecognizer(轻扫)
UIRotationGestureRecognizer(旋转)
UILongPressGestureRecognizer(长按)


敲击事件 UITapGestureRecognizer

- (void)testTap

{

    // 1.创建手势识别器对象

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];

    // 连续敲击2,手势才能识别成功

    tap.numberOfTapsRequired = 2;

    tap.numberOfTouchesRequired = 2;

    tap.delegate = self;


    // 2.添加手势识别器对象到对应的view

    [self.iconView addGestureRecognizer:tap];

    

    // 3.添加监听方法(识别到了对应的手势,就会调用监听方法)

    [tap addTarget:self action:@selector(tapView)];

}

- (void)tapView

{

    NSLog(@"-----tapView");

}

/**

 *  当点击view的时候,会先调用这个方法,代理方法

 */

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

{

    CGPoint pos = [touch locationInView:touch.view];

    if (pos.x <= self.iconView.frame.size.width * 0.5) {

        return YES;

    }

    return NO;

}




长按事件 UILongPressGestureRecognizer

- (void)testLongPress

{

    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] init];

    [longPress addTarget:self action:@selector(longPressView)];

    

    // 至少长按2

    longPress.minimumPressDuration = 2;

    

    // 在触发手势之前,50px范围内长按有效

    longPress.allowableMovement = 50;

    

    [self.redView addGestureRecognizer:longPress];

}


- (void)longPressView

{

    NSLog(@"长按了红色的view");

}


清扫事件 UISwipeGestureRecognizer

- (void)viewDidLoad

{

    [super viewDidLoad];

    

    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeView)];

    //只能设置一个方向

    swipe.direction = UISwipeGestureRecognizerDirectionUp;

    

    [self.redView addGestureRecognizer:swipe];

}


- (void)swipeView

{

    NSLog(@"swipeView");

}


捏合手势 UIPinchGestureRecognizer

#pragma mark - 缩放手势(捏合手势)

- (void)testPinch

{

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

    pinch.delegate = self;

    [self.iconView addGestureRecognizer:pinch];

}


- (void)pinchView:(UIPinchGestureRecognizer *)pinch

{

    pinch.view.transform = CGAffineTransformScale(pinch.view.transform, pinch.scale, pinch.scale);

    pinch.scale = 1; // 这个真的很重要!!!!!

}


旋转手势 UIRotationGestureRecognizer

#pragma mark - 旋转手势

- (void)testRotate

{

    UIRotationGestureRecognizer *recognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateView:)];

    recognizer.delegate = self;

    [self.iconView addGestureRecognizer:recognizer];

}


- (void)rotateView:(UIRotationGestureRecognizer *)recognizer

{

    recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);

    recognizer.rotation = 0; // 这个很重要!!!!!

}



/**

 *  是否允许多个手势识别器同时有效 

 *  Simultaneously : 同时地

 */

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

{

    return YES;

}



拖拽手势 UIPanGestureRecognizer

- (void)viewDidLoad

{

    [super viewDidLoad];

    

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

    [self.purpleView addGestureRecognizer:pan];

}


- (void)panView:(UIPanGestureRecognizer *)pan

{

    

    switch (pan.state) {

        case UIGestureRecognizerStateBegan: // 开始触发手势

            

            break;

            

        case UIGestureRecognizerStateEnded: // 手势结束

            

            break;

            

        default:

            break;

    }

    

    // 1.view上面挪动的距离

    CGPoint translation = [pan translationInView:pan.view];

    CGPoint center = pan.view.center;

    center.x += translation.x;

    center.y += translation.y;

    pan.view.center = center;

    

    // 2.清空移动的距离

    [pan setTranslation:CGPointZero inView:pan.view];

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值