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

如何从-(空) UITouch :withEvent:?获取UITouch位置的UIView对象。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法中获取UITouch位置的UIView对象。

hitTest:withEvent:方法是UIView类的一个方法,用于确定触摸事件发生时的视图层次结构中的哪个视图应该接收触摸事件。该方法会返回一个UIView对象,表示触摸事件发生时的最佳响应视图。

具体步骤如下:

  1. 在触摸事件的处理方法中,获取UITouch对象。
  2. 使用UITouch对象的locationInView:方法获取触摸位置在窗口坐标系中的坐标。
  3. 调用- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法,将触摸位置作为参数传入。
  4. 方法会返回一个UIView对象,即触摸位置对应的最佳响应视图。

以下是一个示例代码:

代码语言:txt
复制
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self.view.window];
    
    UIView *touchedView = [self.view hitTest:touchPoint withEvent:event];
    
    // 处理touchedView对象
    // ...
}

在这个示例中,touchesBegan:withEvent:方法是触摸事件的处理方法。首先获取触摸事件中的UITouch对象,然后使用locationInView:方法获取触摸位置的坐标。最后,调用hitTest:withEvent:方法,将触摸位置作为参数传入,获取到对应的UIView对象。

推荐的腾讯云相关产品和产品介绍链接地址:

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

相关·内容

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

pointInside:withEvent:返回YES,则继续逐级调用,直到找到touch操作发生位置,这个视图也就是hit-test view。...,直到有子视图返回非对象或者全部子视图遍历完毕; •若第一次有子视图返回非对象,则hitTest:withEvent:方法返回此对象,处理结束; •如所有子视图都返回非,则hitTest:withEvent...对于每个触摸操作都会有一个UITouch对象,UITouch对象用来表示一个触摸操作,即一个手指在屏幕上按下、移动、离开整个过程。...UITouch对象在触摸操作过程中在不断变化,所以在使用UITouch对象时,不能直接retain,而需要使用其他手段存储UITouch内部信息。...UIScrollView 5.1.5通过UIView对象获取其所属UIViewController 通过UIView对象获取对象所属UIViewController可以使用UIResponder

1K20

touchesBegan 触摸事件

,通过forin循环来遍历NSSet中每一个元素,当用户用一根手指触摸屏幕时,会创建一个与手指相关联UITouch对象, 保存着跟本次手指触摸相关信息,比如触摸位置、时间、阶段, 当手指离开屏幕时...,系统会销毁相应UITouch对象。...*)view; 2)返回前一个触摸点位置 - (CGPoint)previousLocationInView:(nullable UIView *)view; 3)当前触摸对象坐标 - (CGPoint...:(nullable UIView *)view; 四、UIEvent类 UIEvent:成为事件对象,记录产生时刻和类型,事件对象中包含于当前多点触摸序列相对应所有触摸对象,还可以提供与特定视图或窗口相关联触摸对象...NSSet *)touchesForView:(UIView *)view; 4)获取手势对象 - (nullable NSSet *)touchesForGestureRecognizer

78320

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

UITouch创建 当用户用一根手指触摸屏幕时,会创建一个与手指相关联UITouch对象,一根手指对应一个UITouch对象。 2....UITouch作用 UITouch保存着跟手指相关信息,比如触摸位置、时间、阶段等。 当手指移动时,系统会更新同一个UITouch对象,使之能够一直保存该手指在触摸位置。...UITouch常用方法 - (CGPoint)locationInView:(UIView *)view; //返回值表示触摸在view上位置 //这里返回位置是针对view坐标系(以view...方法来作具体事件处理 4.2 那么主窗口如何找到最合适控件来处理事件?...后往前遍历子控件,重复前面的两个步骤 如果没有符合条件子控件,那么就自己最适合处理 注意:如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件 UIView中提供了两个方法用来寻找最合适

1.6K60

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

基本知识点: 0 UITouch 当每一个指尖在屏幕上触发一次触摸事件时,系统就会生成对应一个UITouch对象,用于记录当前触摸状态,主要包含运动相位、位置、大小、运动、力度(iOS9)等数据;...当触摸事件发生变化时(指尖移动、压力变化),UITouch对象相关信息也会跟着更新;每一次更新都是复用之前UITouch对象,不会重新创建。...*)view; // 获取当前坐标 - (CGPoint)previousLocationInView:(nullable UIView *)view; // 获取上一次坐标 1 UIEvent 在iOS...(UIWindow); 主窗口会调用hitTest:withEvent:方法在视图(UIView)层次结构中找到一个最合适UIView来处理触摸事件,并将UITouch与UIEvent交给UIView...这里需要注意是nextResponder处理规则: UIViewnextResponder属性,如果有管理此viewUIViewController对象,则为此UIViewController对象

1.2K90

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

对象 如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent:方法,并且每次调用时touches参数中只包含一个UITouch对象 二、...,通过forin循环来遍历NSSet中每一个元素 当用户用一根手指触摸屏幕时,会创建一个与手指相关联UITouch对象, 保存着跟本次手指触摸相关信息,比如触摸位置、时间、阶段, 当手指离开屏幕时...,系统会销毁相应UITouch对象 属性: (1)获取触摸产生时所处窗口 @property(nonatomic,readonly,retain) UIWindow *window; (2)获取触摸产生时所处视图...0)),调用时传入view参数为nil的话,返回是触摸点在UIWindow位置 - (CGPoint)locationInView:(nullable UIView *)view; (2)返回前一个触摸点位置...nullable NSSet *)touchesForView:(UIView *)view; (4)获取手势对象 - (nullable NSSet *

2.4K100

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

,那么view会分别调用2次touchesBegan:withEvent:方法,并且每次调用时touches参数中只包含一个UITouch对象 重写以上四个方法,如果是处理UIView触摸事件。...对象 当用户用一根手指触摸屏幕时,会创建一个与手指相关UITouch对象 一根手指对应一个UITouch对象 如果两根手指同时触摸一个view,那么view只会调用一次touchesBegan:withEvent...参数中只包含一个UITouch对象 2.1.1.1.UITouch作用 保存着跟手指相关信息,比如触摸位置、时间、阶段 当手指移动时,系统会更新同一个UITouch对象,使之能够一直保存该手指在触摸位置...对象 UITouch *touch = [touches anyObject]; // 获取当前点位置 CGPoint curP = [touch locationInView...:self]; // 获取上一个点位置 CGPoint preP = [touch previousLocationInView:self]; // 获取它们x轴偏移量

10.7K70

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

保存着跟手指相关信息,比如触摸位置、时间、阶段 当手指移动时,系统会更新同一个UITouch对象,使之能够一直保存该手指在触摸位置 当手指离开屏幕时,系统会销毁相应UITouch对象 UITouch...方法 - (CGPoint)locationInView:(UIView *)view; 返回值表示触摸在view上位置 这里返回位置是针对view坐标系(以view左上角为原点(0, 0)...) 调用时传入view参数为nil的话,返回是触摸点在UIWindow位置 - (CGPoint)previousLocationInView:(UIView *)view; 该方法记录了前一个触摸点位置...,那么子控件就不可能接收到触摸事件(掌握) 如何找到最合适控件来处理事件?...后往前遍历子控件,重复前面的两个步骤 如果没有符合条件子控件,那么就自己最适合处理 原理 // point:是方法调用者坐标系上触摸点位置 - (UIView *)hitTest:(CGPoint

95470

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

2.1 UITouch作用 保存着跟手指相关信息,比如触摸位置、时间、阶段。 1, 当手指移动时,系统会更新同一个UITouch对象,使之能够一直保存该手指触摸位置。2....方法 /*返回值表示触摸在view上位置 这里返回位置是针对view坐标系(以view左上角为原点(0, 0)) 调用时传入view参数为nil的话,返回是触摸点在UIWindow位置...*/ - (CGPoint)locationInView:(nullable UIView *)view; //该方法记录了前一个触摸点位置 - (CGPoint)previousLocationInView...:(nullable UIView *)view; III UIEvent 每产生一个事件,就会产生一个UIEvent对象,UIEvent称为事件对象,记录事件产生时刻和类型 3.1 常见属性 事件类型...@property(nonatomic,readonly) NSTimeInterval timestamp; 3.2 获取touch对象方法 - (nullable NSSet <UITouch

1.1K30

CCLayer在Touch事件(Standard Touch Delegate和Targeted Touch Delegate)

假设是单点touch,则仅仅须要调用 UITouch *touch = [touches anyObject],就能够获取touch对象。假设须要响应多点 touch。...则须要调用[[event allTouches] allObjects]返回一个UITouchNSArray对象。然后使用NSArrayobjectAtIndex依次訪问各个UITouch对象。...为了获取UITouch对象坐标(如果该UITouch名称为touch),调用[touch locationInView: [ touch view]]会返回一个UIView相关坐标viewPoint...我们还须要将前面获取UIViewviewPoint转换为EAGLView坐标,调用[[CCDirector sharedDirector] convertToGL: viewPoint]就可以实现...Targeted Touch Delegate方式 在standard方式中响应处理事件处理都是NSSet,而 targeted方式仅仅处理单个UITouch对象,在多点触摸条件下,应该採纳standard

1.4K10

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

首先触摸对象是视图,而视图UIView继承了UIRespnder类,但是要对事件作出处理,还需要重写UIResponder类中定义事件处理函数。...因为UIEvent包含了整个触摸过程中所有的触摸对象,因此可以调用allTouches方法获取该事件内所有的触摸对象,也可以调用touchesForVIew:或者touchesForWindows:取出特定视图或者窗口上触摸对象...不管时一个手指还是多个手指,轻击操作都会使每个触摸对象tapCount加1,由于上面的例子不需要知道具体触摸对象位置或时间等,因此可以直接调用touchesanyObject方法来获取任意一个触摸对象然后判断其...下面举个例子创建可以拖动视图,这个主要通过触摸对象位置坐标来实现。因此调用触摸对象locationInView:方法即可。...,用CGPoint变量记录,然后在手指移动事件touchesMoved方法中获取触摸对象当前位置,并通过于与原始位置差值计算出移动偏移量,再设置当前视图位置

51820

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

在一个用户点击事件处理过程中,UIEvent对象是唯一。 点击对象UITouch UITouch表示单个点击,其类文件中存在枚举类型UITouchPhase属性,用来表示当前点击状态。...每次点击发生时候,点击对象都放在一个集合中传入UIResponder回调方法中,我们通过集合中对象获取用户点击位置。...UIView *)view获取上个点击位置坐标点。...UIApplication、UIView、和所有UIView派生出来UIKit类(包括UIWindow)都直接或间接地继承自UIResponder类。...,然后在调用hitTest: withEvent:依次获取处理这个事件所有视图对象,在获取所有的可处理事件对象后,开始调用这些对象touches回调方法 在自定义View中重写 touchesBegan

2.4K30

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

首先触摸对象是视图,而视图UIView继承了UIRespnder类,但是要对事件作出处理,还需要重写UIResponder类中定义事件处理函数。...因为UIEvent包含了整个触摸过程中所有的触摸对象,因此可以调用allTouches方法获取该事件内所有的触摸对象,也可以调用touchesForVIew:或者touchesForWindows:取出特定视图或者窗口上触摸对象...不管时一个手指还是多个手指,轻击操作都会使每个触摸对象tapCount加1,由于上面的例子不需要知道具体触摸对象位置或时间等,因此可以直接调用touchesanyObject方法来获取任意一个触摸对象然后判断其...下面举个例子创建可以拖动视图,这个主要通过触摸对象位置坐标来实现。因此调用触摸对象locationInView:方法即可。...,用CGPoint变量记录,然后在手指移动事件touchesMoved方法中获取触摸对象当前位置,并通过于与原始位置差值计算出移动偏移量,再设置当前视图位置

89570

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

如果两根手指同时触摸一个view,那么view只会调用一次 touchesBegan:withEvent:方法,touches参数中装着2个UITouch对象。...如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent:方法,并且每次调用时touches参数中只包含一个UITouch对象 根据touches...中UITouch个数可以判断出是单点触摸还是多点触 判断多少次点击:UITouch属性@property(nonatomic,readonly) NSUInteger tapCount; 1.2 事件产生和传递...*/ - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ NSLog(@"%s",__func...view;--后往前遍历自己子控件 for (int i = self.subviews.count-1; i >= 0; i--) { //获取子控件

89630

IOS触摸事件分发机制详解

怎么在一个页面处理手绘、表情拖动放缩、文本编辑三种消息 阅读本文,你会明白两个问题:IOS如何找到响应者、响应者是如何做出响应,明白这两个问题你就能解决类似上述疑难杂症。...IOS把屏幕监测到点击事件用UITouch对象来表示,最终被封装成UIEvent作为事件消息载体在响应链上传递。...具体检测工作是通过UIView中两个方法来完成 - (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event...,通常是一个UIView对象,如果一个普通对象想成为第一响应者,只需要做两件事情: 重写canBecomeFirstResponder方法返回YES 调用becomeFirstResponder 提示...以下图片很能说明响应链是如何传递。 ?

3.5K90

iOS 事件传递和处理

UIKit寻找目标视图过程 寻找过程主要依赖两个UIView方法:-hitTest:withEvent方法和-pointInsdie:withEvent方法。...- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event hitTest方法返回point和event对应视图; - (BOOL)pointInside...UIWindow是UIView子类,UIViewhitTest方法实现和上述过程一致。 思考: UIView在调用子视图hitTest时,是先调用哪些子视图?...手势处理发生在哪一步 手势(UIGestureRecognizer)是iPhone重要交互方式,手势识别 介绍了手势是如何识别,甚至可以添加自定义手势。...另外一种角度来思考,touchesBegan方法中会用到UITouch,而UITouchview属性是目标视图,所以手势处理应该也放在UIKit寻找目标视图之后。

1.4K20

iOS 中事件响应

多个手指先后触摸,系统会根据触摸位置判断是否更新同一个 UITouch 对象。...若两个手指一前一后触摸同一个位置 (即双击),那么第一次触摸时生成一个 UITouch 对象,第二次触摸会更新这个 UITouch 对象,这是该 UITouch 对象 tapCount 属性值 1...变成 2; 若两个手指一前一后触摸位置不同,将会生成两个 UITouch 对象,两者之间没有联系; 销毁 手指离开屏幕一段时间后,确定该 UITouch 对象不会再被更新,就释放。...苹果回复[2] 在hitTest函数中拿到 UIEvent 对象,其allTouches属性为,等到下文所提到发送事件时,在sendEvent函数中拿到 UIEvent 对象,其allTouches...当倒计时结束前,如果用户手指发生了移动,直接滚动内容视图,不会将该事件传递给对应子视图; 当倒计时结束时,如果用户手指位置没有改变,则调用自身 -touchesShouldBegin:withEvent

2.6K11

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

本篇文章主要介绍如何利用事件处理这些机制来处理公司开发中一些比较棘手需求。例如,点击是A视图,却要让B视图处理事件;点击子视图,却要让父视图处理事件等等。...重写绿色view - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event方法,默认就是绿色view响应事件...原因在于,系统window向下寻找最合适view时候,遍历到红色view时候,发现点不在红色view上,那么默认控制器view就是最合适view。即控制器view响应了事件。...#import "GreenView.h" @implementation GreenView - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent...NSLog(@"RedView %s",__func__); } - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

8.4K20
领券