44.手势识别器

1.单击手势:

    // 1.创建手势识别器
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
    // 1.1设置手势识别器的属性
    // 设置用户必须点击几次才能出发点击事件
    tap.numberOfTapsRequired = 1;
    // 设置用户必须两根手指同时点击才会促发事件
    tap.numberOfTouchesRequired = 1;

    // 2.添加手势识别器到view
    [self.iconView addGestureRecognizer:tap];
    // 3.监听手势识别器
    [tap addTarget:self action:@selector(tapView)];
2.长按手势:

    // 1.创建手势识别器
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] init];

    // 1.1设置长按手势识别器的长按多长时间触发
     longPress.minimumPressDuration = 1;
    // 手指按下后事件响应之前允许手指移动的偏移位
    longPress.allowableMovement = 50;


    // 2.添加手势识别器到View
    [self.customView addGestureRecognizer:longPress];
    // 3.监听手势识别器
    [longPress addTarget:self action:@selector(longPressView)];
3.轻扫手势:

    // 向上
    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] init];
    // 设置轻扫的方向,默认从右向左(最多同时支持两个方向,用"|"隔开)
    swipe.direction = UISwipeGestureRecognizerDirectionUp;
    [self.customView addGestureRecognizer:swipe];
    [swipe addTarget:self action:@selector(swipeView)];
4.旋转手势:

    UIRotationGestureRecognizer *gesture = [[UIRotationGestureRecognizer alloc] init];

    [self.iconView addGestureRecognizer:gesture];
    [gesture addTarget:self action:@selector(rotationView:)];
- (void)rotationView:(UIRotationGestureRecognizer *)gesture
{

//    在传入的transform基础上递增一个弧度
    self.iconView.transform = CGAffineTransformRotate(self.iconView.transform, gesture.rotation);
    // 将旋转的弧度清零(注意不是将图片旋转的弧度清零, 而是将当前手指旋转的弧度清零)
    gesture.rotation = 0;// 如果理解不了 , 记住就OK
}
5.缩放手势:
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] init];

    [self.iconView addGestureRecognizer:pinch];
    [pinch addTarget:self action:@selector(pinchView:)];

- (void)pinchView:(UIPinchGestureRecognizer *)pinch
{
    self.iconView.transform = CGAffineTransformScale(self.iconView.transform, pinch.scale, pinch.scale);

    pinch.scale = 1.0;//和旋转手势的原理一样
}
6.拖拽手势:
    UIPanGestureRecognizer  *pan = [[UIPanGestureRecognizer alloc] init];
    [self.customView addGestureRecognizer:pan];

    [pan addTarget:self action:@selector(panView:)];
- (void)panView:(UIPanGestureRecognizer *)pan
{
    // 返回的值是以手指按下的点为原点
    CGPoint point = [pan translationInView:pan.view];

    NSLog(@"拖拽事件 %@", NSStringFromCGPoint(point));
    CGPoint temp = self.customView.center;
    temp.x += point.x;
    temp.y += point.y;
    self.customView.center = temp;

    // 理解不了就记住就OK
    [pan setTranslation:CGPointZero inView:pan.view];
}
7.若要一个view同时支持多个手势,需要设置手势的代理并实现以下代理方法(返回是否同时支持多个手势):

// 该方法返回的BOOL值决定了view是否能够同时响应多个手势
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    NSLog(@"%@ - %@", gestureRecognizer.class, otherGestureRecognizer.class);
    return YES;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值