手势识别之轻点

#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
时间: 2024-08-17 14:08:57

手势识别之轻点的相关文章

iOS开发之手势识别

感觉有必要把iOS开发中的手势识别做一个小小的总结.在上一篇iOS开发之自定义表情键盘(组件封装与自动布局)博客中用到了一个轻击手势,就是在轻击TextView时从表情键盘回到系统键盘,在TextView中的手是用storyboard添加的.下面会先给出如何用storyboard给相应的控件添加手势,然后在用纯代码的方式给我们的控件添加手势,手势的用法比较简单.和button的用法类似,也是目标动作回调,话不多说,切入今天的正题.总共有六种手势识别:轻击手势(TapGestureRecogniz

iOS开发之手势识别实例_IOS

感觉有必要把iOS开发中的手势识别做一个小小的总结.下面会先给出如何用storyboard给相应的控件添加手势,然后在用纯代码的方式给我们的控件添加手势,手势的用法比较简单.和button的用法类似,也是目标 动作回调,话不多说,切入今天的正题. 总共有六种手势识别:轻击手势(TapGestureRecognizer),轻扫手势 (SwipeGestureRecognizer), 长按手势(LongPressGestureRecognizer),  拖动手势(PanGestureRecogniz

Kinect for Windows SDK开发入门(十)手势识别 上:基本概念

像点击(clicks)是GUI平台的核心,轻点(taps)是触摸平台的核心那样,手势(gestures)是Kinect应用程序的核心.和图形用户界面中的数字交互不同,手势是现实生活中存在的动作.如果没有电脑我们就不需要鼠标,但是没了Kinect,手势依然存在.从另一方面讲,手势是日常生活中人与人之间相互交流的一部分.手势能够增强演讲的说服力,能够用来强调和传递情感.像挥手(waving)或者指向(pointing)这些手势都是某种无声的演讲. Kinect应用程序的设计和开发者的任务就是将这些现

iOS开发之手势识别_IOS

一.UIGestureRecognizer简单介绍 我们已经学习了触摸事件处理,但触摸事件处理起来很麻烦,每个触摸事件处理都需要实现3个touches方法,比较繁琐,实际上我们可以使用更加简单的触摸事件处理操作,那就是 手势识别UIGestureRecognizer . 手势识别操作基类UIGestureRecognizer不能直接使用,我们常使用的是它的子类,这些手势操作类都继承自UIGestureRecognizer类 常用手势识别子类: 点按手势 UITapGestureRecognize

iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控

概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件.远程控制事件等展开学习: iOS事件简介 触摸事件 手势识别 运动事件 远程控制事件 iOS事件 在iOS中事件分为三类: 触摸事件:通过触摸.手势进行触发(例如手指点击.缩放) 运动事件:通过加速器进行触发(例如手机晃动) 远程控制事件:通过其他远程设备触发(例如耳机控制按钮) 下图是苹果官方对于

iOS开发中手势识别

iOS开发中手势识别有六种: 轻击手势(TapGestureRecognizer), 轻扫手势(SwipeGestureRecognizer), 长按手势(LongPressGestureRecognizer), 拖动手势(PanGestureRecognizer), 捏合手势(PinchGestureRecognizer), 旋转手势(RotationGestureRecognizer), 1,轻击手势(TapGestureRecognizer) UITapGestureRecognizer*

IOS 七种手势操作(拖动、捏合、旋转、点按、长按、轻扫、自定义)详解及实例代码_IOS

IOS 七种手势操作 今天为大家介绍一下IOS 的七种手势,手势在开发中经常用到,所以就简单 通俗易懂的说下, 话不多说,直接看代码: 1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作. UIPanGestureRecognizer(拖动) UIPinchGestureRecognizer

IOS手势操作(拖动、捏合、旋转、点按、长按、轻扫、自定义)_IOS

下面通过图文并茂的方式给大家分享下IOS手势操作(拖动.捏合.旋转.点按.长按.轻扫.自定义)的相关内容. 1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作. UIPanGestureRecognizer(拖动) UIPinchGestureRecognizer(捏合) UIRotatio

札记:android手势识别功能实现(利用MotionEvent)_Android

摘要 本文是手势识别输入事件处理的完整学习记录.内容包括输入事件InputEvent响应方式,触摸事件MotionEvent的概念和使用,触摸事件的动作分类.多点触摸.根据案例和API分析了触摸手势Touch Gesture的识别处理的一般过程.介绍了相关的GestureDetector,Scroller和VelocityTracker.最后分析drag和scale等一些手势的识别. 输入源分类 虽然android本身是一个完整的系统,它主要运行在移动设备的特性决定了我们在它上面开的app绝大数