手势识别之轻点

简介:

#import "ViewController.h"
@interface ViewController ()
@property(nonatomic,strong)UIImageView *ImgView;
@end
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
    self.ImgView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"img.jpg"]];
    self.ImgView.tag=10001;
    self.ImgView.frame=CGRectMake(100, 100, 100, 100);
    //UIImageView默认不支持用户交互 改为YES
    self.ImgView.userInteractionEnabled=YES;
    //Tap、pinch,pan、swipe只是一个简单的单个触摸,为了实现多触摸,需要设置multipleTouchEnabled支持多点触摸
    self.ImgView.multipleTouchEnabled=YES;
    //实例化识别对象 并注册监听方法
    UITapGestureRecognizer *singletap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(signaltap:)];
    [self.ImgView addGestureRecognizer:singletap];
    //需要点击的次数 默认1
    singletap.numberOfTapsRequired=1;
    //同时点击的手指个数 默认1 在模拟器中模拟不出多个手指测试需要在真机
    singletap.numberOfTouchesRequired=2;
    //设置代理
    singletap.delegate=self;
    [self.view addSubview:self.ImgView];
     
    UITapGestureRecognizer *doubletap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(signaltap:)];
    doubletap.numberOfTapsRequired=2;
    doubletap.numberOfTouchesRequired=1;
    doubletap.delegate=self;
    [self.ImgView addGestureRecognizer:doubletap];
    //两个手指点击一次和一个手指点击两个用户点击不清楚可能混淆
    [singletap requireGestureRecognizerToFail:doubletap];
     
}
-(void)signaltap:(UIGestureRecognizer *)gestureRecognizer
{
    //获取点击的视图
    UIView *view=gestureRecognizer.view;
    NSLog(@"%ld",view.tag);
    // 状态是枚举类型
//    UIGestureRecognizerStatePossible,
//    UIGestureRecognizerStateBegan,
//    UIGestureRecognizerStateChanged,
//    UIGestureRecognizerStateEnded,正常情况只响应这一个
//    UIGestureRecognizerStateCancelled,
//    UIGestureRecognizerStateFailed,
//    UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded
    NSLog(@"手势状态:%ld",gestureRecognizer.state);
    NSLog(@"轻点");
}
//询问一个手势接收者是否应该开始执行一个触摸接收事件
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    //指定响应的区域
    CGPoint currentPoint=[gestureRecognizer locationInView:self.view];
    if (CGRectContainsPoint(CGRectMake(100, 100, 50, 50), currentPoint)) {
        return YES;
    }
    return NO;
}
//询问delegate,两个手势是否同时接收消息,返回YES同时接收。返回NO,不同时接收,默认NO
//也就是说两个gesture recognizers的delegate方法只要任意一个返回YES,则这两个就可以同时识别
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    NSLog(@"识别");
    return NO;
}
//在一个手势生命周期的早期,当一个视图里面所有的手势识别都仍处理Possible状态,那么在iOS 7中gestureRecognizer:shouldRequireFailureOfGestureRecognizer: 和 gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer: 消息会发送给这所有的手势识别的委托,来配对这个视图里的手势识别。返回YES来对这个两个传入的手势进行优先排序,就是说知道另一个手势识别失败时,这个手势识别才能成功。本质上,这些委托方法会把返回的结果作为一次和永久的决定,从而对每个手势发生时多出实时决策。(这个还不太理解)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return NO;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return NO;
}
//在toucheBegan这个方法之前,也就是在手势状态为began之前.此方法在window对象在有触摸事件发生时,调用gesture recognizer的touchesBegan:withEvent:方法之前调用,如果返回NO,则gesture recognizer不会看到此触摸事件。(默认情况下为YES).
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return YES;
}
 
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}
@end

相关文章
|
1月前
|
算法 人机交互 vr&ar
《以 C++为笔,绘就手势识别人机交互新画卷》
在科技发展的浪潮中,手势识别技术正引领人机交互进入一个更为自然、智能的新阶段。C++语言以其卓越的性能和强大的功能,成为手势识别系统开发的中流砥柱,通过高效的数据处理、精准的硬件控制和丰富的库支持,推动了手势识别技术的广泛应用,从智能家居到虚拟现实,再到智能驾驶,C++都在不断为手势识别人机交互系统的发展贡献力量。
70 30
|
5月前
|
编解码 Linux 计算机视觉
RoboMaster 视觉 摄像头教程
这篇文章是RoboMaster视觉教程的一部分,介绍了摄像头的参数选择、曝光和Gamma矫正技术,以及如何在Linux环境下使用OpenCV库来配置和操作摄像头,以满足高速视觉处理的需求。
RoboMaster 视觉 摄像头教程
|
3月前
|
机器学习/深度学习 vr&ar 光互联
ACM TOG:仅通过手机拍照就可以对透明物体进行三维重建
【10月更文挑战第20天】近期发表在ACM TOG上的论文《NU-NeRF: Neural Reconstruction of Nested Transparent Objects with Uncontrolled Capture Environment》提出了一种名为NU-NeRF的神经重建方法,能够在无需特殊设备的情况下,对嵌套的复杂透明物体进行高质量的三维重建。该方法通过分离反射和折射部分,结合神经符号距离场和神经渲染技术,实现了高保真的外表面几何形状和内部表面重建。实验结果表明,NU-NeRF在合成和真实场景中均表现出色,具有广泛的应用前景。
76 3
|
4月前
|
人工智能 机器人 Python
XGO手势识别
【9月更文挑战第04天】
42 8
|
7月前
|
数据可视化 计算机视觉 Python
活体检测眨眼、张嘴、点头、摇头动作一网打尽:人脸面部活体检测系统【含Python源码+PyqtUI界面+原理详解】
活体检测眨眼、张嘴、点头、摇头动作一网打尽:人脸面部活体检测系统【含Python源码+PyqtUI界面+原理详解】
|
7月前
|
算法 计算机视觉
图像处理之老照片特效
图像处理之老照片特效
33 0
|
机器学习/深度学习 传感器 算法
【车道检测】基于帧差法结合hough实现车道检测含播报声音附GUI界面
【车道检测】基于帧差法结合hough实现车道检测含播报声音附GUI界面
|
机器学习/深度学习 监控 vr&ar
姿态识别、手势识别(附代码)
姿态识别、手势识别(附代码)