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

ios事件-触摸事件2(手势 和 pointInSide()、hitTest()、touchesBegan()、touchesMoved()、touchesEnded()的关系)

所以如果你在你自定义的手势里面的重写的touchesBegan: withEvent:方法中不调用[super touchesBegan:touches withEvent:event];时,手势就无法识别...= 13 //识别出不是点击手势了,所以[CustomerGesture touchesMoved:withEvent:]就不会再被调用了。...当系统识别出不是点击手势(即不是UITapGestureRecognizer)了,所以[CustomerGesture touchesMoved:withEvent:]就不会再被调用了,而此时RedView...当系统识别出是滑动手势(即是UIPanGestureRecognizer)了,所以系统会调用RedView的touchesCancelled:withEvent:方法,然后调用手势的监听方法(GestureVC...:] 从上面的结果可以看出,当系统虽然识别出是滑动手势(即是UIPanGestureRecognizer)了,但不会调用RedView的touchesCancelled:withEvent:方法,然后调用手势的监听方法

1.1K20

iOS 事件传递和处理

UIKit寻找目标视图的过程 寻找的过程主要依赖两个UIView的方法:-hitTest:withEvent方法和-pointInsdie:withEvent方法。...UIWindow是UIView的子类,UIView的hitTest方法实现和上述过程一致。 思考: UIView在调用子视图hitTest时,是先调用哪些子视图?...UIWindow的sendTouchesForEvent:方法调用的是我们熟悉的touches四大方法: -touchesBegan:withEvent: -touchesMoved:withEvent...手势处理发生在哪一步 手势(UIGestureRecognizer)是iPhone的重要交互方式,手势识别 介绍了手势是如何识别,甚至可以添加自定义手势。...上文分析了手势的识别是发生在响应链回调之前,也就是tap手势是发生在touches系列方法回调之前,那么Tap手势应该是在UIButton的touches方法之前。

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

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

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; -(void)touchesMoved:(NSSet *)touches...1.创建手势识别实例 2.设置手势识别属性,例如手指数量,方向等 3.将手势识别附加到指定的视图之上 4.编写手势触发监听方法 每一个手势识别器的用法都差不多,比如UITapGestureRecognizer...的使用步骤如下: //创建手势识别器对象 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; //设置手势识别器对象的具体属性...:)]; 3.3手势识别的枚举 typedef NS_ENUM(NSInteger, UIGestureRecognizerState) { // 没有触摸事件发生,所有手势识别的默认状态...手势的使用 4.1 长按手势 长按手势一定要判断状态,否则方法会在手势开始和结束时分别调用!方法会被调用两次!

    2.3K40

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

    )event; (void)touchesMoved:(NSSet )touches withEvent:(UIEvent )event; (void)touchesEnded:(NSSet )touches...从后往前遍历子控件,重复前面的两个步骤 如果没有符合条件的子控件,那么就自己最适合处理 原理 // point:是方法调用者坐标系上的触摸点的位置 - (UIView *)hitTest:(CGPoint...;就会将事件顺着响应者链条往上传递,传递给上一个响应者 4> 接着就会调用上一个响应者的touches….方法 如何判断上一个响应者 1> 如果当前这个view是控制器的view,那么控制器就是上一个响应者...UIGestureRecognizer 为了完成手势识别,借助于手势识别器----UIGestureRecognizer 利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势...UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势 UITapGestureRecognizer(敲击) UIPinchGestureRecognizer

    97670

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

    touches方法来作具体的事件处理 touchesBegan… touchesMoved… touchedEnded… 1.3 UIView不接收触摸事件的三种情况 不接收用户交互userInteractionEnabled...[self pointInside:point withEvent:event]) { return nil; } //3、判断自己的子控件,去找有没有比自己更合适的...1)必须得自定义view 2)由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件 3)不容易区分用户的具体手势行为 3.1 方式二:手势识别功能...iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度。...see also iOS 小技能:响应者链的事件传递过程、手势识别器的使用步骤、抽屉效果的实现https://kunnan.blog.csdn.net/article/details/74107917

    97630

    iOS-手势UIGestureRecognier详解一. 手势UIGestureRecognier简介二. 手势的抽象类——UIGestureRecognizer三. UIGestureRecogni

    这个属性设置手势识别结束后,是立刻发送touchesEnded或pressesEnded消息到事件传递链或者等待一个很短的时间后,如果没有接收到新的手势识别任务,再发送。...,上例中我们使用了拖拽手势和touchesMoved两个触发方式,当我们把cancelTouchesInView设置为NO时,在屏幕上滑动,两种方式都在触发,打印如下: ?...pan.cancelsTouchesInView = YES 我们发现touchesMoved的方法仍然被调用了,这是为什么呢?...touchMoved方法被调用,当识别出拖拽手势以后,就会终止touch事件的传递。...pan.delaysTouchesBegan = YES; 因为此时在拖拽手势识别失败之前,都不会给时间传递链发送消息,所以就不会在调用touchesMoved触发事件了 而delaysTouchesEnded

    2.6K50

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

    ; //一根或者多根手指在view上移动时自动调用view的下面方法(随着手指的移动,会持续调用该方法) - (void)touchesMoved:(NSSet *)touches withEvent:...:(UIEvent *)event 触摸移动:- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 触摸结束:- (void...从后往前遍历子控件,重复前面的两个步骤 如果没有符合条件的子控件,那么就自己最适合处理 注意:如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件 UIView中提供了两个方法用来寻找最合适的...// 用来寻找最合适的View处理事件,只要一个事件传递给一个控件就会调用控件的hitTest方法,参数point 表示方法调用者坐标系上的点 - (nullable UIView *)hitTest:...因此iOS3.2之后我们在日常开发中关于触摸事件处理方面一般使用手势识别功能Gesture Recognizer,简化开发难度。

    1.7K60

    【IOS开发进阶系列】手势专题

    1 touchesBegan手势         iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式:     - (void)touchesBegan...(UIEvent *)event     - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event     - (void)touchesMoved...手势识别UIGestureRecognizer类是个抽象类,下面的子类是具体的手势,开发这可以直接使用这些手势识别。...当创建手势时,指定一个回调方法,当手势开始,改变、或结束时,回调方法被调用。         添加到需要识别的View中。...2.10 自定义手势         自定义手势继承:UIGestureRecognizer,实现下面的方法: – touchesBegan:withEvent: – touchesMoved:withEvent

    51740

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

    // 手势识别取消     UIGestureRecognizerStateFailed,     // 识别失败,方法将不会被调用     UIGestureRecognizerStateRecognized...,当这个属性设置为YES时,如果识别到了手势,系统将会发送touchesCancelled:withEvent:消息在其时间传递链上,终止触摸事件的传递,设置为NO,则不会终止事件的传递,举个例子来说,... *)ges{     NSLog(@"第一个手势的触发方法"); } 上面我们使用了拖拽手势和touchesMoved两个触发方式,当我们把cancelTouchesInView设置为NO时,在屏幕上滑动...,如果没有接收到新的手势识别任务,再发送。...shouldReceiveTouch:(UITouch *)touch; //开始进行手势识别时调用的方法,返回NO则结束,不再触发手势 - (BOOL)gestureRecognizerShouldBegin

    2K20

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

    触摸事件 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; - (void)touchesMoved:(NSSet *)...OS会将它识别为一组触摸对象,并将它们封装在UITouch和UIEvent形式的实例,消息循环(runloop)会接收到触摸事件并放入当前应用程序的事件队列中。...如果第一响应者没有进行处理,第一响应者将事件将处理事件的责任传递给下一个,更高级的对象,即当前responder对象的nextResponder。...,然后在调用hitTest: withEvent:依次获取处理这个事件的所有视图对象,在获取所有的可处理事件对象后,开始调用这些对象的touches回调方法 在自定义View中重写 touchesBegan...在view添加单击手势之后,原来的touchesEnded方法就无效了。touchesBegin 还是生效的。

    2.5K30

    iOS 小技能:响应者链的事件传递过程、手势识别器的使用步骤、抽屉效果的实现

    抽屉效果的实现 I 手势识别器 为了完成手势识别,必须借助于手势识别器UIGestureRecognizer。...轻扫) UIRotationGestureRecognizer(旋转) UILongPressGestureRecognizer(长按) 2、 UITapGestureRecognizer 1.2 手势识别器的使用步骤...每一个手势识别器的用法都差不多,比如UITapGestureRecognizer的使用步骤: //创建手势识别器对象 UITapGestureRecognizer *tap = [[UITapGestureRecognizer...= 2; //添加手势识别器到对应的view上 [self.iconView addGestureRecognizer:tap]; //监听手势的触发 [tap addTarget:self action...:@selector(tapIconView:)]; 1.3 手势识别器的使用 // #import "ViewController.h" @interface ViewController

    90230

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

    (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event // 一根或者多根手指离开view,系统会自动调用view的下面方法 -...必须要自定义UIView子类继承自UIView。因为苹果不开源,没有把UIView的.m文件提 供给我们。...; } // 手指移动就会调用这个方法 // 这个方法调用非常频繁 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{...对象,使之能够一直保存该手指在的触摸位置 当手指离开屏幕时,系统会销毁相应的UITouch对象 提 示:iPhone开发中,要避免使用双击事件!...即便父控件是最合适的view了,子控件的hitTest:withEvent:方法还是会调用,不然怎么知道有没有更合适的!

    11.4K70

    IOS开发系列——UIView专题之四:事件分发机制篇【整理,部分原创】

    pointInside:withEvent:方法,如果pointInside返回YES,则表明触摸事件发生在我自己内部,则会遍历自己的所有Subview去寻找最小单位(没有任何子view)的UIView...Category如下 [UIView+HitTest.h] /** * @abstract hitTestBlock * * @param其余参数参考UIView hitTest:withEvent...:(UIEvent *)event;- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;- (void)touchesEnded...调用super的目的就是为了把事件传递给nextResponder,并且如果我们在touchesBegan中没有调用super,则super不会响应其他的回掉(touchesMoved/touchesEnded...到目前为止,事件的分发还没有结束,之后会有一篇文章介绍一个很重要的角色,手势。 最后,附上官方的文档 Event Handling Guide for iOS

    72310

    【IOS开发基础系列】UIView专题

    ->根控制器(第一种方式没有根控制器,所以不能跟着旋转)。     ...如果设置为NO,当前动画结束前新动画将使用视图最後状态的位置作 为开始状态。这个方法将不会做任何事情如果动画没有运行或者没有在动画块外调用。....这样可以在控制器中设置一些值给View(如果这些View draw的时候需要用到某些变量值).     1.如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。     ...调用super的目的就是为了把事件传递给nextResponder,并且如果我们在touchesBegan中没有调用super,则super不会响应其他的回掉(touchesMoved/touchesEnded...到目前为止,事件的分发还没有结束,之后会有一篇文章介绍一个很重要的角色,手势。

    70530

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

    一、概念介绍 在用户使用app过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型: 事件类型.png 响应者对象UIResponder 在iOS中不是任何对象都能处理事件...只会产生一个事件对象,4个触摸方法都是同一个event参数 如果两根手指同时触摸一个view,那么view只会调用一次touchesBegan:withEvent:方法,touches参数中装着2个UITouch...对象 如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent:方法,并且每次调用时的touches参数中只包含一个UITouch对象 二、...(2)手指移动事件 - (void)touchesMoved:(NSSet *)touches withEvent:(nullable UIEvent *)event; (3)手指抬起事件...*)view; (4)获取手势对象 - (nullable NSSet *)touchesForGestureRecognizer:(UIGestureRecognizer *

    2.6K100

    事件传递、响应者链条

    :(UIEvent *)event; - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event; - (void)touchesEnded...(继承自UIResponder)都有以下的方法 - (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event...:原理 // point是该视图的坐标系上的点 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { // 1.判断自己能否接收触摸事件...} } // 没有找到比自己更合适的view return self; } 三、响应者链条 当找到最合适的响应者之后, 便会调用控件相应的touches方法来作具体处理...(即调用super的touches方法),从之前往下走的路线往上回传,在其中加入了Viewtroller来处理 如果view的控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它的父View

    89010

    iOS_38_手势

    再次总结:响应者链条传递机制(上一个响应者就是NEXT RESPONDER) 传统监听事件的做法:(不再推荐使用) 六种手势识别器,后面会详细举例: 假设要同一时候监听两种以上的手势...(void)addSwipe{ // 1.创建Swipe手势识别器对象,同一时候绑定监听方法(识别到了相应的手势,就会调用监听方法) UISwipeGestureRecognizer *swipe...// 1.创建LongPress手势识别器对象,同一时候绑定监听方法(识别到了相应的手势,就会调用监听方法) UILongPressGestureRecognizer *longPress = [...(void)addPinch{ // 1.创建Pinch手势识别器对象,同一时候绑定监听方法(识别到了相应的手势,就会调用监听方法) UIPinchGestureRecognizer *pinch...pinch];}// 2.加入 旋转手势- (void)addRotate{ // 1.创建Rotation手势识别器对象,同一时候绑定监听方法(识别到了相应的手势,就会调用监听方法) UIRotationGestureRecognizer

    93320

    iOS 中的事件响应

    ,但可能正在评估触摸事件,这是默认状态; began:手势识别器已接收到识别为连续手势的触摸对象; changed:手势识别器已接收到被识别为连续手势变化的触摸; ended:手势识别器已接收到被识别为连续手势结束的触摸...; cancelled:手势识别器已接收到导致取消连续手势的触摸; failed:手势识别器收到了一个无法识别为手势的多点触控序列; recognized:手势识别器接收到一个多点触控序列,并将其识别为它的手势...从上图中我们可以看出:Window 在将事件传递给最佳响应者的同时,也会将事件传递给相关的手势识别器并由手势识别器优先识别。...若手势识别器成功识别了事件,就会取消最佳响应者对事件的响应;若手势识别器没能识别事件,最佳响应者才完全接手事件的响应权。...当倒计时结束前,如果用户的手指发生了移动,直接滚动内容视图,不会将该事件传递给对应的子视图; 当倒计时结束时,如果用户的手指位置没有改变,则调用自身的 -touchesShouldBegin:withEvent

    2.8K11

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

    *)touches withEvent:(nullable UIEvent *)event; //一根或者多根手指在view上移动,系统会自动调用view的下面方法(随着手指的移动,会持续调用该方法)...- (void)touchesMoved:(NSSet *)touches withEvent:(nullable UIEvent *)event; //一根或者多根手指离开view...当手指离开屏幕时,系统会销毁相应的UITouch对象 提示:iPhone开发中,要避免使用双击事件!...响应触摸事件的都是屏幕上的界面元素,而且必须是继承自UIResponder类的界面类(包括各种常见的视图类及其视图控制器类,如UIView和UIViewController)才可以响应触摸事件。...4.2.响应者链 通过命中测试找到命中者后,任务并没有完成,因为最终的命中者不一定是事件的响应者。

    1.1K30
    领券