首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

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

ios事件-触摸事件2(手势 和 pointInSide()、hitTest()、touchesBegan()、touchesMoved()、touchesEnded()、touchesCancelled...手势和pointInSide()以及hitTest()的关系:必须先通过pointInSide()和hitTest()找到的view(即处理事件的view),才能响应view的手势事件。 2....通过hitTest()、pointInSide()找到的view,那么view和它的superView的手势都能响应,但不会响应它的子view的手势。 3....- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { NSLog(@"%@, %s", self.bgColorString...CustomerGesture继承UIPanGestureRecognizer, 点击一下红色按钮,输出结果如下: redColorView, -[RedView hitTest:withEvent:

97920

在一个app中间有一个button,在你手触摸屏幕点击后,到这个button收到点击事件,中间发生了什么

UITouch和UIEvent对象打包, 放到当前活动的Application的事件队列中 单例的UIApplication会从事件队列中取出触摸事件并传递给单例UIWindow UIWindow使用hitTest...:withEvent:方法查找touch操作的所在的视图view hitTest:withEvent是如何找到对应的View?...1.首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内; 2.若返回NO,则hitTest:withEvent:返回nil; 3.若返回YES,则向当前视图的所有子视图发送...hitTest:withEvent:消息,(所有子视图的遍历顺序是从top到bottom,即从subviews数组 的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕); 4.若第一次有子视图返回非空对象...,则hitTest:withEvent:方法返回此对象,处理结束; 5.如所有子视图都返回非,则hitTest:withEvent:方法返回自身(self)。

1.1K10

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

5.1.4hitTest方法以及不规则区域内触摸事件处理方法 5.1.4.1hitTest:withEvent:方法流程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application...hitTest:withEvent:方法的处理流程如下: •首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内; •若返回NO,则hitTest:withEvent...,直到有子视图返回非空对象或者全部子视图遍历完毕; •若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束; •如所有子视图都返回非,则hitTest:withEvent...【原】ios的hitTest方法以及不规则区域内触摸事件处理方法 http://www.cnblogs.com/wengzilin/p/4249847.html hitTest:withEvent:...方法流程 http://blog.csdn.net/jiajiayouba/article/details/23447145 5.1.4.2使用hitTest自定义响应事件 1、hitTest Hacking

99820

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

,事件都会先传递给这个控件,随后再调用hitTest:withEvent:方法 拦截事件的处理 正因为hitTest:withEvent:方法可以返回最合适的view,所以可以通过重写hitTest:withEvent...不管点击哪里,最合适的view都是hitTest:withEvent:方法中返回的那个view。 通过重写hitTest:withEvent:,就可以拦截事件的传递过程,想让谁处理事件谁就处理事件。...技巧:想让谁成为最合适的view就重写谁自己的父控件的hitTest:withEvent:方法返回指定的子控件,或者重写自己的hitTest:withEvent:方法 return self。...但是,建议在父控件的hitTest:withEvent:中返回子控件作为最合适的view! 原因在于在自己的hitTest:withEvent:方法中返回自己有时候会出现问题。...控制器的view的hitTest:withEvent:方法return nil或者window的hitTest:withEvent:方法return self return nil的含义: hitTest

10.6K70

iOS UIButton 点击无响应的解决办法

:(UIEvent *)event 这是View里的一个方法,处理流程如下 首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内; 若返回NO,则hitTest:...withEvent:返回nil; 若返回YES,则向当前视图的所有子视图(subviews)发送hitTest:withEvent:消息,所有子视图的遍历顺序是从top到bottom,即从subviews...数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕; 若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束; 如所有子视图都返回非,则hitTest...最后,这个触摸事件交给主窗口的hitTest:withEvent:方法返回的视图对象去处理。...所以我们可以在返回nil时进行处理,因为这个时候button是在父View外的 //返回一个view来响应事件 - (UIView *)hitTest:(CGPoint)point withEvent:

3.3K10

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

& alpha >0.01) 不满足直接返回nil; 通过pointInside:withEvent:方法,检查当前点击是否落在当前view中; 如果点击落在当前view中,遍历subView执行hitTest...:withEvent:; 如果subView的hitTest:withEvent:有返回,则返回该返回; 如果subView的hitTest:withEvent...返回,因为view 2满足了两个条件: 通过hitTest找到了view 2 view 2内部没有其他子view ?...再看看另一个特殊的场景: view 2还是view 1的子view;但当一个点击落在view 2的区域内时,查找还是从UIWindow开始,但在view 1的hitTest中就返回了nil,因为点击区域不在...view 1中,导致view 1的子view都不会再进行hitTest;这点跟web中的事件处理是截然不同的;这也导致一些超边界的点击必须由业务去重载hitText方法。

1.2K90

事件分发机制

20160912134713336-1609212026.png 下面就说说我们这个hit-Testing,在UIView中,有这样两个需要你特别注意的方法; - (nullable UIView *)hitTest...point withEvent:(nullable UIEvent *)event; // default returns YES if point is in bounds 我们来说一下,说说 hitTest...2:View1 和 View2 都是 RootView 的子视图,都会接收到 hitTest 消息,但记得遍历的顺序是从上到下,所以先判断 View1 界面,这时候调用 View1 的pointInside...:point withEvent:event]; } } else { return [super hitTest:point withEvent...上面就是hitTest的一些概念和简单的使用,其实它能做的事还是挺多的,我把自己学习的笔记链接全都整理出来给; iOS事件分发机制(一) hit-Testing 技术哥 iOS事件分发机制(二)The

1K80

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

所以,我们可以在hitTest:withEvent:方法里面强制返回父控件为最合适的view,也就是返回红色的view。...注意,不能够重写父控件的hitTest:withEvent:方法,也就是不能够重写红色的view的hitTest:withEvent:方法。...原因在于,如果重写父控件的hitTest:withEvent:方法,并在该方法中返回父控件本身,会导致点击父控件的父控件时,也是父控件为最合适的view。...我起初尝试重写红色的view的hitTest:withEvent:方法,返回红色的view为最合适的view。虽然可以解决问题,但是点击其他任何地方,也是红色的view响应事件。...随后,我又重写了绿色的view的hitTest:withEvent:方法,返回红色的view。但是,点击非重叠区,没响应。

8.3K20

iOS中的事件的产生和传递

2.3如何寻找最合适的view 两个重要的方法: hitTest:withEvent:方法 pointInside方法 2.4 hitTest:withEvent:方法什么时候调用 只要事件传递给一个控件...,控件就会调用自己的hitTest:withEvent:方法 注 意:不管控件能不能处理事件,也不管触摸点在不在这个控件上,事件都会先传递给这个控件,随后再调用hitTest:withEvent:方法...2.5拦截事件的处理 ●不管点击哪里,最合适的view都是hitTest:withEvent:方法中返回的那个view。...●通过重写hitTest:withEvent:,就可以拦截事件的传递过程,想让谁处理事件谁就处理事件。...注 意:如果hitTest:withEvent:方法中返回nil,那么调用该方法的控件本身和其子控件都不是最合适的view,也就是在自己身上没有找到更合适的view。

88610
领券