博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手势识别(点按,长按,轻扫)
阅读量:5056 次
发布时间:2019-06-12

本文共 2527 字,大约阅读时间需要 8 分钟。

 08-手势识别(点按,长按,轻扫)

    通过touches方法监听view触摸事件有以下几个缺点
    1.必须得自定义view,在自定义的View当中去实现touches方法.
    2.由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件
    3.不容易区分用户的具体手势行为(不容易区分是长按手势,还是缩放手势)这些等.
    
    iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer在触摸事件处理方面大大简化了开发者的开发难度
    
    UIGestureRecognizer手势识别器
    利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势
    UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势
    
    注意手势有以下几种:
    UITapGestureRecognizer(敲击)
    UIPinchGestureRecognizer(捏合,用于缩放)
    UIPanGestureRecognizer(拖拽)
    UISwipeGestureRecognizer(轻扫)
    UIRotationGestureRecognizer(旋转)
    UILongPressGestureRecognizer(长按)
    手势使用方法:
        1.创建手势
        2.添加手势
        3.实现手势方法
    1.添加点按手势
        创建手势
        Target:当哪对象要坚听手势
        action:手势发生时调用的方法
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self 
                                                                        action:@selector(tap)];
        手势也可以设置代理
        tap.delegate = self;
        添加手势
        [self.imageV addGestureRecognizer:tap];
    
        以下为手势代理方法:
        是否允许接收手指.
        当返回为yes的时候,表示能够接收手指,当为No的时候,表示不能够接收手指,也就是不能够接收事件.
        -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:
        (UITouch *)touch{
            获取当前手指所在的点
           CGPoint curP =  [touch locationInView:self.imageV];
            if (curP.x > self.imageV.bounds.size.width * 0.5) {
                在右边,返回NO
                return NO;
            }else{
                 在左边,返回yes,
                return YES;
            }
        }
        
        当手指开始点击时调用
        -(void)tap{
            NSLog(@"%s",__func__);
        }
    2.添加长按手势
        UILongPressGestureRecognizer *longP = [[UILongPressGestureRecognizer alloc] 
                                    initWithTarget:self action:@selector(longPress:)];
        添加手势
        [self.imageV addGestureRecognizer:longP];
        当手指长按时调用
        注意,长按手势会调用多次,当开始长按时会调用,当长按松开时会调用,当长按移动时, 也会调用.
        一般我们都是在长按刚开始时做事情,所以要判断它的状态.
        这个状态是保存的当前的手势当中, 所以要把当前的长按手势传进来, 来判断当前手势的状态.
        
        - (void)longPress:(UILongPressGestureRecognizer *)longP{
            手势的状态是一个枚举UIGestureRecognizerState,可以进入头文件当中查看.
            if (longP.state == UIGestureRecognizerStateBegan) {
                NSLog(@"开始长按时调用");
            }else if(longP.state == UIGestureRecognizerStateChanged){
                会持续调用
                NSLog(@"当长按拖动时调用");
            }else if(longP.state == UIGestureRecognizerStateEnded){
                NSLog(@"当长按松手指松开进调用");
            }
            
        }
    3.轻扫手势
        
        UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] 
                                initWithTarget:self action:@selector(swipe:)];
        注意:轻扫手势默认轻扫的方向是往右轻扫,可以去手动修改轻扫的方向
        一个手势只能对象一个方向,想要支持多个方向的轻扫,要添加多个轻扫手势
        swipe.direction = UISwipeGestureRecognizerDirectionLeft;
        添加手势
        [self.imageV addGestureRecognizer:swipe];
        
           再添加一个轻扫手势
        轻扫手势
        UISwipeGestureRecognizer *swipe2 = [[UISwipeGestureRecognizer alloc] 
                                initWithTarget:self action:@selector(swipe:)];
        注意:轻扫手势默认轻扫的方向是往右轻扫,可以去手动修改轻扫的方向
        一个手势只能对象一个方向,想要支持多个方向的轻扫,要添加多个轻扫手势
        swipe2.direction = UISwipeGestureRecognizerDirectionDown;
        添加手势
        [self.imageV addGestureRecognizer:swipe2];

转载于:https://www.cnblogs.com/xufengyuan/p/6986596.html

你可能感兴趣的文章
图像的双缓存技术
查看>>
微信小程序template模板与component组件的区别及使用方法
查看>>
android开发 多线程
查看>>
我害怕了吗?
查看>>
使用openpyxl 操作excel的基础
查看>>
http etag
查看>>
通过机构查询该机构下,以及下级机构的人员 id
查看>>
【NOIP2013】货车运输
查看>>
Windows10+Python3+BeautifulSoup4 安装
查看>>
实验六:通过grub程序引导本地磁盘内核启动系统(busybox)
查看>>
基于Flask实现后台权限管理系统 - 高清图
查看>>
relative 内部 margin
查看>>
Siki_Unity_1-2_Unity5.2入门课程_进入Unity开发的奇幻世界_Roll A Ball
查看>>
学习windows编程 day3 之滚动条完善
查看>>
用命令行来安装mac应用
查看>>
阿里云ECS安装Cadvisor报错
查看>>
个人作业5——软工个人总结
查看>>
BSP创建中的一些问题
查看>>
查询的page集合中修改某字段在页面显示的格式
查看>>
【洛谷 P4291】 [HAOI2008]排名系统(Splay,Trie)
查看>>