首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UIGestureRecognizer  手势识别一、概念介绍二、UIView 的分类三、UIGestureRecognizer 抽象类四、UIGestureRecognizerDelegate 代理

View视图 @property(nullable, nonatomic,readonly) UIView *view; 4、是否取消触摸控件的响应 默认为YES,这种情况下当手势识别器识别到触摸之后...默认是NO,这种情况下当发生一个触摸时,手势识别器先捕捉到到触摸,然后发给触摸到的控件,两者各自做出响应。...只有在识别失败之后才会将触摸事件发给触摸到的控件,这种情况下控件view的响应会延迟约0.15ms。...:(nullable UIView*)view; 6、获取触摸手指数 - (NSUInteger)numberOfTouches; 7、多指触摸的触摸点相对于指定视图的位置 - (CGPoint)...:(UIGestureRecognizer *)gestureRecognizer; 2、手指触摸屏幕后回调的方法,返回NO则不再进行手势识别,方法触发等 此方法在window对象在有触摸事件发生时,

3.1K81

史上最详细的iOS之事件的传递和响应机制-原理篇

在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接受并处理事件,我们称之为“响应者对象”。以下都是继承自UIResponder的,所以都能接收并处理事件。...我们只能通过子类继承父类,重写子类方法的方式处理UIView的触摸事件(注意:我说的是UIView触摸事件而不是说的 UIViewController的触摸事件)。...也就是让UIView随着手指的移动而移动。   ...也可以说,响应者链是由多个响应者对象连接起来的链条。在iOS中响应者链的关系可以用下图表示: ?...;就会将事件顺着响应者链条往上传递,传递给上一个响应者;接着就会调用上一个响应者的touches….方法 如何做到一个事件多个对象处理: 因为系统默认做法是把事件上抛给父控件,所以可以通过重写自己的touches

11.4K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS-UITouch事件处理详解1. iOS中的事件基本介绍2.UITouch3.UIEvent4. 事件的产生和传递5. 通过UITouch方法监听View的触摸事件的缺点

    1. iOS中的事件基本介绍 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。...UITouch的常用方法 - (CGPoint)locationInView:(UIView *)view; //返回值表示触摸在view上的位置 //这里返回的位置是针对view的坐标系的(以view...判断自己是否能接收触摸事件? 判断触摸点是否在自己身上?...,并且可以让一个事件多个对象处理。...通过UITouch方法监听View的触摸事件的缺点 必须自定义View 由于是View内部的touches方法中监听触摸事件,因此默认情况下无法让其他外界对象监听View的触摸事件 不容易区分用户的具体手势行为

    1.7K60

    iOS-控件响应用户控制事件之事件处理

    事件处理 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。...UITouch UITouch的作用 保存着跟手指相关的信息,比如触摸的位置、时间、阶段 当手指移动时,系统会更新同一个UITouch对象,使之能够一直保存该手指在的触摸位置 当手指离开屏幕时,系统会销毁相应的...UITouch对象 UITouch的方法 - (CGPoint)locationInView:(UIView *)view; 返回值表示触摸在view上的位置 这里返回的位置是针对view的坐标系的(以...监听触摸事件的做法 如果想监听一个view上面的触摸事件,之前的做法是 自定义一个view 实现view的touches方法,在方法内部实现具体处理代码 通过touches方法监听view触摸事件,有很明显的几个缺点...1.必须得自定义view 由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件 不容易区分用户的具体手势行为 UIGestureRecognizer

    97670

    iOS 小技能: Responder Chain(响应者链)【上篇】

    Responder Chain: I 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称之为“响应者对象”。...2.1 UITouch的作用 保存着跟手指相关的信息,比如触摸的位置、时间、阶段。 1, 当手指移动时,系统会更新同一个UITouch对象,使之能够一直保存该手指的触摸位置。2..../*返回值表示触摸在view上的位置 这里返回的位置是针对view的坐标系的(以view的左上角为原点(0, 0)) 调用时传入的view参数为nil的话,返回的是触摸点在UIWindow的位置*/...响应触摸事件的都是屏幕上的界面元素,而且必须是继承自UIResponder类的界面类(包括各种常见的视图类及其视图控制器类,如UIView和UIViewController)才可以响应触摸事件。...其中,前者用于递归寻找命中者,后者则是检测当前视图是否被命中,即触摸点坐标是否在视图内部。

    1.1K30

    touchesBegan 触摸事件一、概念介绍二、方法介绍三、参数介绍:touches四、参数介绍:event

    ,只有继承了UIResponder的对象才能接收并处理事件。...,通过forin循环来遍历NSSet中的每一个元素 当用户用一根手指触摸屏幕时,会创建一个与手指相关联的UITouch对象, 保存着跟本次手指触摸相关的信息,比如触摸的位置、时间、阶段, 当手指离开屏幕时...timestamp; (5)获取当前触摸事件所处的状态 触摸事件在屏幕上有一个周期,即触摸开始、触摸点移动、触摸结束,还有中途取消。...而通过phase可以查看当前触摸事件在一个周期中所处的状态 @property(nonatomic,readonly) UITouchPhase phase; UITouchPhase 枚举: UITouchPhaseBegan...:(nullable UIView *)view; (4)当前触摸对象的前置坐标 - (CGPoint)precisePreviousLocationInView:(nullable UIView *)

    2.7K100

    手势的抽象类——UIGestureRecognizer三. UIGestureRecogni

    )locationInView:(nullable UIView*)view; //设置触摸点数 - (NSUInteger)numberOfTouches; //获取某一个触摸点的触摸位置 - (CGPoint...delaysTouchesBgan属性用于控制这个消息的传递时机,默认这个属性为NO,此时在触摸开始的时候,就会发消息给事件传递链,如果我们设置为YES,在触摸没有被识别失败前,都不会给事件传递链发送消息...比如,单击和双击并存时,如果不做处理,它就只能发送出单击的消息。为了能够识别出双击手势,就需要用下面的方法一个特殊处理逻辑,即先判断手势是否是双击,在双击失效的情况下作为单击手势处理。...UIGestureRecognizerDelegate 前面我们提到过关于手势对象的协议代理,通过代理的回调,我们可以进行自定义手势,也可以处理一些复杂的手势关系,其中方法如下: //手指触摸屏幕后回调的方法...点击手势——UITapGestureRecognizer 点击手势十分简单,支持单击和多次点击,在我们手指触摸屏幕并抬起手指时会进行触发,其中有如下两个属性我们可以进行设置: //设置点击次数,默认为单击

    2.6K50

    touchesBegan 触摸事件

    一、概念介绍 1、在用户使用App过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型: 1)触摸事件 2)加速计事件 3)远程操控事件 响应者对象UIResponder 在iOS...中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。...,通过forin循环来遍历NSSet中的每一个元素,当用户用一根手指触摸屏幕时,会创建一个与手指相关联的UITouch对象, 保存着跟本次手指触摸相关的信息,比如触摸的位置、时间、阶段, 当手指离开屏幕时...; 5)获取当前触摸事件所处的状态 触摸事件在屏幕上有一个周期,即触摸开始、触摸点移动、触摸结束,还有中途取消。...而通过phase可以查看当前触摸事件在一个周期中所处的状态 @property(nonatomic,readonly) UITouchPhase phase; UITouchPhase 枚举: UITouchPhaseBegan

    83320

    IOS开发系列——UIView专题之五:常用开发技巧篇

    当图片尺寸超过ImageView尺寸时,只有部分显示在ImageView中。...如果一个子视图的区域超过父视图的bound区域(父视图的clipsToBounds属性为NO,这样超过父视图bound区域的子视图内容也会显示),那么正常情况下对子视图在父视图之外区域的触摸操作不会被识别...对于每个触摸操作都会有一个UITouch对象,UITouch对象用来表示一个触摸操作,即一个手指在屏幕上按下、移动、离开的整个过程。...UITouch对象在触摸操作的过程中在不断变化,所以在使用UITouch对象时,不能直接retain,而需要使用其他手段存储UITouch的内部信息。...UIScrollView 5.1.5通过UIView对象获取其所属UIViewController 通过UIView对象获取该对象所属的UIViewController可以使用UIResponder

    1.2K20

    iOS中手势的应用1. 四类事件的主要方法2. 响应者链3. 手势识别功能(Gesture Recognizer)4. 手势的使用

    例如用户对屏幕进行了侧滑,APP就需要对这个手势进行相应的处理,给用户一个反馈。这些相应的事件就都是在UIResponder中定义的。...触摸事件.png 但是在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象”。...手势识别功能(Gesture Recognizer) 如果想监听一个view上面的触摸事件,之前的做法是 自定义一个view 实现view的touches方法,在方法内部实现具体处理代码 通过touches...方法监听view触摸事件,有很明显的几个缺点 必须得自定义view 由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件 不容易区分用户的具体手势行为...- iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度 3.1手势识别器(UIGestureRecognizer) 为了完成手势识别

    2.3K40

    iOS开发--事件传递,响应者链条及常见面试题

    在iOS中只有继承UIResponder的对象才能够接收并处理事件,UIResponder 是所有响应对象的基类,在UIResponder类中定义了处理上述各种事件的接口。...,首先我们通过一张图来简单了解一下事件的传递以及响应. 1.响应者链条 响应者链条就是由多个响应者对象连接起来的链条,它的作用就是让我们能够清楚的看见每个响应者之间的联系,并且可以让一个时间多个对象处理.... 2.响应过程 iOS系统检测到手指触摸(Touch)操作时会将其打包成一个UIEvent对象,并放入当前活动Application的事件队列,单例的UIApplication会从事件队列中取出触摸事件并传递给单例的...1.自己能响应触摸事件 2.触摸点在自己身上 3.从后往前递归遍历子控件, 重复上两步 4.如果没有符合条件的子控件, 那么就自己最合适处理 3.两个重要的响应方法(UIView的) 1.hit-test...,返回自己 return self; } pointInside: 该方法判断触摸点是否在控件身上,是则返回YES,否则返回NO,point参数必须是方法调用者的坐标系.

    85331

    iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用

    iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用 一、引言         在iOS系统中,手势是进行用户交互的重要方式,通过UIGestureRecognizer类,... UIView*)view;  //设置触摸点数 - (NSUInteger)numberOfTouches;  //获取某一个触摸点的触摸位置 - (CGPoint)locationOfTouch:(...(2) @property(nonatomic) BOOL delaysTouchesBegan; 通过上面的例子,我们知道,在一个手势触发之前,是会一并发消息给事件传递链的,delaysTouchesBgan...属性用于控制这个消息的传递时机,默认这个属性为NO,此时在触摸开始的时候,就会发消息给事件传递链,如果我们设置为YES,在触摸没有被识别失败前,都不会给事件传递链发送消息。...otherGestureRecognizer NS_AVAILABLE_IOS(7_0); 四、点击手势——UITapGestureRecognizer         点击手势十分简单,支持单击和多次点击,在我们手指触摸屏幕并抬起手指时会进行触发

    2K20

    iOS 小技能: Responder Chain(响应者链)【下篇】

    如果两根手指同时触摸一个view,那么view只会调用一次 touchesBegan:withEvent:方法,touches参数中装着2个UITouch对象。...如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent:方法,并且每次调用时的touches参数中只包含一个UITouch对象 根据touches...3.1 方式一:通过touches方法监听view触摸事件 如果想监听一个view上面的触摸事件,之前的做法是: 自定义一个view 实现view的touches方法,在方法内部实现具体处理代码 通过...1)必须得自定义view 2)由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件 3)不容易区分用户的具体手势行为 3.1 方式二:手势识别功能...iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度。

    97630

    iOS Programming – 触摸事件处理(2)

    首先触摸的对象是视图,而视图的类UIView继承了UIRespnder类,但是要对事件作出处理,还需要重写UIResponder类中定义的事件处理函数。...不管时一个手指还是多个手指,轻击操作都会使每个触摸对象的tapCount加1,由于上面的例子不需要知道具体触摸对象的位置或时间等,因此可以直接调用touches的anyObject方法来获取任意一个触摸对象然后判断其...,因此在第一次点击的时候,设置背景色的方法已经启动,在检测到双击的时候先要把先前对应的方法取消掉,可以通过调用NSObject类的cancelPreviousPerformRequestWithTarget...下面举个例子创建可以拖动的视图,这个主要通过触摸对象的位置坐标来实现。因此调用触摸对象的locationInView:方法即可。...[touch locationInView:self.view]获取手指触摸在当前视图上的位置,用CGPoint变量记录,然后在手指移动事件touchesMoved方法中获取触摸对象当前位置,并通过于与原始位置的差值计算出移动偏移量

    93870

    touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event使用

    首先触摸的对象是视图,而视图的类UIView继承了UIRespnder类,但是要对事件作出处理,还需要重写UIResponder类中定义的事件处理函数。...{ self.view.backgroundColor = [UIColor redColor]; } } 上面的例子说明在触摸手指离开后...不管时一个手指还是多个手指,轻击操作都会使每个触摸对象的tapCount加1,由于上面的例子不需要知道具体触摸对象的位置或时间等,因此可以直接调用touches的anyObject方法来获取任意一个触摸对象然后判断其...,因此在第一次点击的时候,设置背景色的方法已经启动,在检测到双击的时候先要把先前对应的方法取消掉,可以通过调用NSObject类的cancelPreviousPerformRequestWithTarget...下面举个例子创建可以拖动的视图,这个主要通过触摸对象的位置坐标来实现。因此调用触摸对象的locationInView:方法即可。

    57420

    事件传递、响应者链条

    一、事件 iOS里有三种事件:触摸(touch)、加速(motion)、远程控制 在UIResponder里,有以下事件处理 // 触摸事件 - (void)touchesBegan:(NSSet...,能够处理touchesBegan等触摸事件 当一个Touch事件产生时,要先找到响应者,iOS通过Hit-Test机制来寻找响应者,每一个UIView(继承自UIResponder)都有以下的方法 -...-> UIWindow -> Root View -> subview -> ··· -> initalView 系统检测到手指触摸(Touch)操作时,将Touch 以UIEvent的方式加入UIApplication...UIApplication和UIWindow通过sendEvent:方法传递事件 UIWindow 之后会通过hitTest:withEvent:方法寻找触碰点所在的视图 hitTest:withEvent...:原理 // point是该视图的坐标系上的点 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { // 1.判断自己能否接收触摸事件

    89010

    UI篇-UIResponder之事件传递和响应精析

    withEvent:(UIEvent *)event; - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event; 其中只有在程序强制退出或者来电时...(视频播放、下一首) - (void)remoteControlReceivedWithEvent:(UIEvent *)event; 事件链 当我们用手指轻触屏幕,iPhone OS会将它识别为一组触摸对象...UIView对象并不一定会把事件传递给每一个子view,因为UIView是通过hitTest方法来判断点击事件发生在哪个子view上面的,会采用逆序查询也就是优先查询后加载的子试图,这样做也是为了优化查找速度...第一响应者是应用程序中当前负责接收触摸事件的响应者对象(通常是一个UIView对象)。...我们在使用UITextView和UITextField的时候,可以通过它们的inputAccessoryView属性给输入时呼出的键盘加一个附属视图,通常是UIToolBar,用于回收键盘。

    2.5K30
    领券