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

UIEvent 传入 -[UIView hitTest:]

您好!您提到的 UIEvent 是一个 iOS 和 macOS 中的类,它是事件处理的基础。UIEvent 是 UIResponder 类的一个子类,它主要用于处理触摸事件、键盘事件和其他类型的事件。

在 UIKit 框架中,当用户与应用程序的用户界面元素交互时,系统会生成一个 UIEvent 对象。这个对象包含了与交互相关的所有信息,例如触摸的位置、触摸的时间等等。然后,UIKit 会将这个 UIEvent 对象传递给视图层次结构中的合适的视图,以便视图可以响应用户的交互。

在视图层次结构中,视图可以通过重写 hitTest:withEvent: 方法来确定哪个视图应该响应 UIEvent。在这个方法中,视图可以检查 UIEvent 对象中的信息,例如触摸的位置,来确定哪个子视图应该响应事件。如果子视图可以响应事件,则该方法应该返回该子视图;否则,该方法应该返回 nil。

总之,UIEvent 是 iOS 和 macOS 中处理用户交互事件的基础,它可以帮助开发者更好地理解用户的行为,并根据用户的行为来响应事件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

; 远程控制事件 - (void)remoteControlReceivedWithEvent:(UIEvent *)event; (二)事件的处理 下面以UIView为例来说明触摸事件的处理。...*)view; // 返回值表示触摸在view上的位置 // 这里返回的位置是针对view的坐标系的(以view的左上角为原点(0, 0)) // 调用时传入的view参数为nil的话,返回的是触摸点在...重新开始设置形变参数 // make:相对于最原始的位置形变 // CGAffineTransform t:相对这个t的形变的基础上再去形变 // 如果相对哪个形变再次形变,就传入它的形变...- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ return self.subviews[0]; } - (void...- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView *view = [super hitTest:point

11.1K70

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

每次点击发生的时候,点击对象都放在一个集合中传入UIResponder的回调方法中,我们通过集合中对象获取用户点击的位置。...UIView对象并不一定会把事件传递给每一个子view,因为UIView是通过hitTest方法来判断点击事件发生在哪个子view上面的,会采用逆序查询也就是优先查询后加载的子试图,这样做也是为了优化查找速度...其中涉及到了UIView中的两个方法(可以重写),当hitTest返回YES才会调用这个View的 Touch事件,因为如果返回NO,则当前View被排除在相应链之外了。 ?...- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event; //判断当前点击事件是否存在最优响应者(First Responder)...我们可以重写view的-(UIView )hitTest:(CGPoint)point withEvent:(UIEvent)event方法来测试 #import "UIView+MYtes.h" #import

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

    *)view; // 获取当前坐标 - (CGPoint)previousLocationInView:(nullable UIView *)view; // 获取上一次坐标 1 UIEvent 在iOS...)、物理按键事件( UIEventTypePresses);例如屏幕被点击了,系统会创建一个UIEvent,如果UIEvent对象已经存在,那直接复用已有的UIEventUIEvent在应用中一旦被创建...(1)查找阶段: 先介绍UIView的两个方法: - (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event; 该方法用于检查当前坐标是否落在当前...view - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 该方法的主要逻辑是: 检查当前view是否能响应事件(userInteractionEnabled...); 主窗口会调用hitTest:withEvent:方法在视图(UIView)层次结构中找到一个最合适的UIView来处理触摸事件,并将UITouch与UIEvent交给UIView处理(通过touchesBegan

    1.2K90

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

    > *gestureRecognizers 2.3 UITouch的方法 /*返回值表示触摸在view上的位置 这里返回的位置是针对view的坐标系的(以view的左上角为原点(0, 0)) 调用时传入的...- (CGPoint)previousLocationInView:(nullable UIView *)view; III UIEvent 每产生一个事件,就会产生一个UIEvent对象,UIEvent...一个事件响应者的完成主要经过两个过程:hitTest方法命中视图和响应者链确定响应者。...4.1.命中测试 命中测试(hitTest)主要会用到视图类的hitTest函数和pointInside函数。...当触摸事件发生后,系统会将触摸事件以UIEvent的方式加入到UIApplication的事件队列中,UIApplication将事件分发给根部的UIWindow去处理,UIWindow则开始调用hitTest

    1.1K30

    iOS 事件传递和处理

    主线程同样在启动时监听source0,接收eventfetch-thread线程发送的IOHIDEvent数据,再封装成UIEvent,根据UIEvent的类型判断是否需要启动hitTest。...UIKit寻找目标视图的过程 寻找的过程主要依赖两个UIView的方法:-hitTest:withEvent方法和-pointInsdie:withEvent方法。...- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event hitTest方法返回point和event对应的视图; - (BOOL)pointInside...:(CGPoint)point withEvent:(UIEvent *)event pointInside方法返回point和event是否在自己当前视图上; 这两个方法UIView都提供了默认实现,...UIWindow是UIView的子类,UIViewhitTest方法实现和上述过程一致。 思考: UIView在调用子视图hitTest时,是先调用哪些子视图?

    1.5K20

    iOS 中的事件响应

    Hit-Testing 的过程大概如下图: Hit-Testing过程 该过程中会用到 UIView 提供的两个关键函数 /// 返回符合条件的UIView func hitTest(_ point:...-> UIView? /// 检查坐标是否在自身内部 func point(inside point: CGPoint, with event: UIEvent?)...根据上述介绍,我们可以复原出hitTest的函数实现,如下所示。 override func hitTest(_ point: CGPoint, with event: UIEvent?)...苹果回复[2] 在hitTest函数中拿到的 UIEvent 对象,其allTouches属性为空,等到下文所提到的发送事件时,在sendEvent函数中拿到的 UIEvent 对象,其allTouches...可以注意到addTarget时,target类型是一个可选值,如传入 nil 时,Application会自动在响应链上从上往下寻找能响应action的对象。

    2.7K11

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

    withEvent:(UIEvent )event; (void)touchesCancelled:(NSSet )touches withEvent:(UIEvent )event; //加速计事件...*)view; 返回值表示触摸在view上的位置 这里返回的位置是针对view的坐标系的(以view的左上角为原点(0, 0)) 调用时传入的view参数为nil的话,返回的是触摸点在UIWindow...的位置 - (CGPoint)previousLocationInView:(UIView *)view; 该方法记录了前一个触摸点的位置 UIEvent 每产生一个事件,就会产生一个UIEvent对象...从后往前遍历子控件,重复前面的两个步骤 如果没有符合条件的子控件,那么就自己最适合处理 原理 // point:是方法调用者坐标系上的触摸点的位置 - (UIView *)hitTest:(CGPoint...*fitView = [childView hitTest:childP withEvent:event]; if (fitView) { return fitView

    97270

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

    我们称之为“响应者对象” UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 1.1 事件可以分为三大类型...UITouch的常用方法 - (CGPoint)locationInView:(UIView *)view; //返回值表示触摸在view上的位置 //这里返回的位置是针对view的坐标系的(以view...的左上角为原点(0, 0)) //调用时传入的view参数为nil的话,返回的是触摸点在UIWindow的位置 - (CGPoint)previousLocationInView:(UIView *)...view; //记录了前一个触摸点的位置 3.UIEvent UIEvent:称为事件对象,记录事件产生的时刻和类型 每产生一个事件,就会产生一个UIEvent对象 常见属性 //事件类型 @property...// 用来寻找最合适的View处理事件,只要一个事件传递给一个控件就会调用控件的hitTest方法,参数point 表示方法调用者坐标系上的点 - (nullable UIView *)hitTest:

    1.7K60
    领券