首页
学习
活动
专区
圈层
工具
发布

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

每次点击发生的时候,点击对象都放在一个集合中传入UIResponder的回调方法中,我们通过集合中对象获取用户点击的位置。...- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event; //判断当前点击事件是否存在最优响应者(First Responder)...我们可以重写view的-(UIView )hitTest:(CGPoint)point withEvent:(UIEvent)event方法来测试 #import "UIView+MYtes.h" #import...__); return [self wcq_hitTest:point withEvent:event]; } 然后我们分别新建三个UIView的子类: AView、BView、CView并依次按顺序添加到...,然后在调用hitTest: withEvent:依次获取处理这个事件的所有视图对象,在获取所有的可处理事件对象后,开始调用这些对象的touches回调方法 在自定义View中重写 touchesBegan

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

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

    手势和pointInSide()以及hitTest()的关系:必须先通过pointInSide()和hitTest()找到的view(即处理事件的view),才能响应view的手势事件。 2....- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { NSLog(@"%@, %s", self.bgColorString...= 13 //识别出不是点击手势了,所以[CustomerGesture touchesMoved:withEvent:]就不会再被调用了。...NO表示手势识别出来,不cancel掉view的touch方法的回调 gesture.cancelsTouchesInView = NO; //只是添加了这一行代码!!!!!!!!!!...中添加了gesture.cancelsTouchesInView = NO;,即告诉系统说手势识别出来后,不要cancel掉view的touch方法的回调,所以RedView的touchesMoved:

    1.4K20

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

    ,事件都会先传递给这个控件,随后再调用hitTest:withEvent:方法 拦截事件的处理 正因为hitTest:withEvent:方法可以返回最合适的view,所以可以通过重写hitTest:withEvent...但是,建议在父控件的hitTest:withEvent:中返回子控件作为最合适的view! 原因在于在自己的hitTest:withEvent:方法中返回自己有时候会出现问题。...控制器的view的hitTest:withEvent:方法return nil或者window的hitTest:withEvent:方法return self return nil的含义: hitTest...- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView *view = [super hitTest:point...3、在事件的响应中,如果某个控件实现了touches...方法,则这个事件将由该控件来接受,如果调用了[super touches….]

    12.6K71

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

    window对象会在首先在view hierarchy的顶级view上调用hitTest:withEvent:,此方法会在视图层级结构中的每个视图上调用pointInside:withEvent:,如果...hitTest:withEvent:方法的处理流程如下: •首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内; •若返回NO,则hitTest:withEvent...【原】ios的hitTest方法以及不规则区域内触摸事件处理方法 http://www.cnblogs.com/wengzilin/p/4249847.html hitTest:withEvent:...view为scrollview,button无法响应,可以修改topView的hitTest:withEvent:方法如下: - (UIView*)hitTest:(CGPoint)point withEvent...:withEvent:方法流程 http://blog.csdn.net/jiajiayouba/article/details/23447145 iOS的UIView的hitTest的分析 http

    2.1K20

    iOS 点击事件如何穿透透明的View?

    -(id)hitTest:(CGPoint)pointwithEvent:(UIEvent *)event { UIView *hitView= [super hitTest:point withEvent...:withEvent:方法的处理流程如下: 首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内; 若返回NO,则hitTest:withEvent:返回nil;...若返回YES,则向当前视图的所有子视图(subviews)发送hitTest:withEvent:消息,所有子视图的遍历顺序是从top到bottom,即从subviews数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕...- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { // 1.判断当前控件能否接收事件 if (self.userInteractionEnabled...:point toView:childView]; // 寻找到最合适的view UIView *fitView = [childView hitTest:childP

    4.5K10

    iOS 事件体系知识及原理小记

    (1)查找阶段: 先介绍UIView的两个方法: - (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event; 该方法用于检查当前坐标是否落在当前...view - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 该方法的主要逻辑是: 检查当前view是否能响应事件(userInteractionEnabled...执行hitTest:withEvent:; 如果subView的hitTest:withEvent:有返回,则返回该返回; 如果subView的hitTest...(UIWindow); 主窗口会调用hitTest:withEvent:方法在视图(UIView)层次结构中找到一个最合适的UIView来处理触摸事件,并将UITouch与UIEvent交给UIView...(2)事件响应阶段(响应链): 在上面提到的查找阶段,通过hitTest:withEvent:最终查找到的最后view自然就做为第一个可以响应该事件的view,当该view不能处理该事件,系统会通过nextResponder

    1.5K90

    事件响应链的原理

    事件的分发和传递。 1.当iOS程序中发生触摸事件后,系统会将事件加入到UIApplication管理的一个任务队列中 2.UIApplication将处于任务队列最前端的事件向下分发。...3.UIWindow将事件向下分发,即UIView。 4.UIView首先看自己是否能处理事件,触摸点是否在自己身上。如果能,那么继续寻找子视图。 5.遍历子控件,重复以上两步。...其中 UIView不接受事件处理的情况主要有以下三种 1)alpha <0.01 2)   userInteractionEnabled = NO 3)hidden = YES 4)hitTest...:withEvent: 返回nil // 此方法返回的View是本次点击事件需要的最佳View - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent...*)event // 判断一个点是否落在范围内  - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 事件传递是从下到上的

    1.3K40
    领券