iOS HitTest 机制

举例讲解iOS应用开发中hitTest触摸事件的编写方法 主要介绍了举例讲解iOS应用开发中hitTest触摸事件的编写方法,重点讲解了两个view之间的事件传递,需要的朋友可以参考下 立即下载

当用户触摸(Touch)屏幕进行交互时,系统首先要找到响应者(Responder)。系统检测到手指触摸(Touch)操作的时候,将Touch
以UIEvent 的方式加入到UIApplication 事件队列中去。UIApplication 从事件队列中取出最新的触摸事件进行分发传递到UIWindow 进行处理
.UIWindow 会通过hit Test:WithEvent 方法寻找触碰点所在的视图。这个过程称之为hit-test view。

顺序如下
UIApplication --》UIWindow—》Root view —> subview

在顶级视图(Root View) 上调用pointInside:withEvent 方法判断触摸点是否在当前视图内;
如果返回NO,那么hitTest:withEvent 返回nil
如果返回YES,那么会向当前视图的所有子视图发送hitTest:WithEvent 消息,所有子视图的遍历顺序是从最顶层视图一直到最底层视图,即从subviews 数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕。

如果有subview 的hitTest:WithEvent 返回非空对象则返回此对象,处理结束。
此过程,子视图也是根据pointInSide:WithEvent 返回值来确定是返回空还是当前子视图对象的。并且这个过程如果子视图的hidden=yes
userInteractionEnabled=NO或者alpha小于0.1都会并忽略。
如果所有subview 遍历结束仍然没有返回非空对象,则hitTest:WithEvent 返回self
系统就是这样通过hit test 找到触碰到的视图(initial View)进行响应。

    // 此方法就是寻找最为合适的响应的空间
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
     
        super.hitTest(point, with: event);
        
        // 1 UIView不接收触摸事件的三种情况:
        
//        * userInteractionEnabled = NO
//            * hidden = YES
//            * lpha = 0.0 ~ 0.01
        
        if self.isUserInteractionEnabled == false || self.alpha <= 0.1 || self.isHidden == true {
            
            return nil;
        }
        
        //  2 判断当前的点是否在此控件上面
        if self.point(inside: point, with: event) == false {
            return nil;
        }
        
        
        // 3 以上条件都满足 去遍历自己的子空间
        let count = self.subviews.count;
        
        for view in self.subviews {
            
            // 转为目标控件的点
            let current_point = self.convert(point, to: view);
            // 让子视图再去遍历 如果有的话 进行返回操作 没有的话 不要紧 返回nil就好了
            if view.hitTest(current_point, with: event) != nil {
                return view;
            }
        }
        
        // 4 如果以上都没有找到 那就返回自己
        return self;
   
        
    }
AHB总线协议 1. 简介         AHB总线规范是AMBA总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus)、ASB (Advanced System Bus)、APB (Advanced Peripheral Bus)。AHB用于高性能、高时钟频率的系统结构,典型的应用如ARM核与系统内 阅读详情

相关推荐

FOC控制必看:单/双/三电阻电流采样方案全对比(附NXP实战避坑指南)

本文深入对比了FOC控制中单电阻、双电阻和三电阻电流采样方案的优劣与适用场景,重点剖析了采样时序、窗口与ADC转换的工程挑战。针对NXP平台,提供了解决采样窗口过窄的实战方案与配置指南,帮助工程师根据成本与性能需求做出最优选择,并规避常见设计陷阱。

n2o3p4的博客 411

iOS开发-事件分发机制(hitTest与响应链)

一、概述: ios事件分发机制即寻找当前 交互事件(UIEvent) 的最佳响应的View并回调该View的响应方法。 流程总体可抽象为画“V”字型,起点为UIApplication,底部顶点为最佳响应View,终点为消费事件的View 图解: V字通常只有左侧(探查过程)+ 顶点(最佳响应View并回调touches等响应方法)而不会画完 有右侧通常是最佳响应View没有处理或进一步调用父View的touches响应方法 若均未消费则回到UIApplication才画完完整的“V”字

吃了么没吃回家吃点儿 2851

告别复杂编码!用GNURadio + VLC + USRP三步搞定无线视频“直播”(附ffmpeg转码命令)

本文介绍了一种基于GNURadio、VLC和USRP的无线视频传输方案,无需复杂编码即可实现实时视频传输。通过三步流程(工具准备、音频验证、视频传输)和ffmpeg转码命令,帮助用户快速搭建系统,适用于教学演示和原型开发。方案特别强调实时显示效果和带宽优化技巧。

weixin_31714129的博客 358

iOS hitTest

文章目录 一、什么是hitTest 二、hitTest的调用顺序 三、事件的传递顺序 四、hitTest的实现思路 五、hitTest的运用场景 1、事件穿透 2、子视图超出父视图范围 一、什么是hitTest - (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event ...

风中的劲草 1万+

fdtd(时域有限差分)仿真

基础入门阶段采用 Step by step 的教学方式带着做具体的案例,在案例中学习 FDTD 应用的。的痛难点,将 FDTD 仿真引入实验当中,通过软件可视化处理有效直观的展示仿真的流程,与实验数。图像传感器,OLED 和液晶,表面计量,表面等离子体,石墨烯,太阳能电池,集成光子组件,超材。料,衍射光学和光子晶体。波,场极化,磁场,周期性结构,半球功率积分等设计解决方案,提供时域有限差分分析函数,时域。子光学传感器、热电子光探测器的光学特性研究、光学微腔宽带吸收器等多个方向的研究方法。

y2715163545的博客 5431

基于CY7C68013A芯片的USB2.0设计

基于FPGA的USB2.0读写控制项目简介CY7C68013A芯片介绍CY7C68013A芯片读写时序控制CY7C68013A芯片读写代码USB2.0的测试结果结束语 项目简介 我们前面已经写过了USB3.0的FPGA实现,所用到的芯片是FX600Q芯片,这次我们讲解USB2.0的FPGA代码的编写。我们用到的芯片是Cypress厂家的Cy7C68013A,该款芯片在市场上的应用率极广,我们这里不...

zhangningning1996的博客 1万+

hitTest事件

iOS中,不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.处理事件的对象叫@“响应者对象” 事件可以分为3大类型. 1.触摸事件 2.加速计事件 3.远程控制事件 // 触摸事件 - (void)touchesBegan:(NSSet *)touches withEvent:(nullable UIEvent *)event; - (void)touchesMo

Lea__DongYang的博客 766

Impala>Impala安装部署

文章目录1.安装前提2.下载安装包、依赖包3.虚拟机新增磁盘(可选)4.配置本地yum源5.安装Impala6.修改Hadoop、Hive配置7.修改impala配置8.启动、关闭impala服务 1.安装前提 集群提前安装好hadoop,hive。 hive安装包scp在所有需要安装impala的节点上,因为impala需要引用hive的依赖包。 hadoop框架需要支持C程序访问接口,查看下...

qq_44509920的博客 836

关于iOS的重定向

重定向与转发经常不明白是什么意思 现在来解释一下:请求重定向相当于是重新发送了一次请求,而请求转发是一次请求; 1>请求重定向:就好比我们找一个A广告公司给设计名片,A明确告诉我们他们不会设计,就让我们找B公司,结果B公司给我设计好了,所以我们会对外宣称是B公司给我们设计的名片,(所以我们就相当于发送了两次次请求,URL地址栏里就从A变成了B公司)一、ios webview怎么判断http是重定向

4478

二、频率调制光谱(FMS)技术——error信号的数学模型及其他推论

一些推论。

qq_41111336的博客 1604

结构力学仿真软件:STAAD.Pro:结构抗震设计与STAAD.Pro应用_2024-08-10_11-49-29.Tex

STAAD.Pro是一款广泛应用于结构工程领域的仿真软件,由Bentley Systems开发。它能够进行结构分析和设计,支持多种结构类型,包括桥梁、建筑物、塔架等。STAAD.Pro提供了强大的建模工具,用户可以轻松创建复杂的结构模型,并进行静态和动态分析。软件还支持多种载荷组合,包括地震载荷,以及提供详细的报告和图纸输出,便于工程师进行设计和审查。STAAD.Pro是一款广泛应用于结构工程设计的软件,其界面直观,功能强大,能够进行结构分析与设计。菜单栏。

974

iOS - hitTest方法&pointInside方法

hitTest方法 当事件传递给控件的时候,就会调用控件的这个方法,去寻找最合适的view point:当前的触摸点,point这个点的坐标系就是方法调用者 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event; pointInside方法 作用:判断当前这个点在不在方法调用者(控件)上 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event; hitTest

宋卓的博客 1042

基于Spring Security 6的OAuth2 系列之二 - 客户端--非代码演示授权码模式

至此,我们就使用浏览器+postman工具演示了通过授权码模式去获取Gitee的用户信息。这过程中,我们只是遵循OAuth2的流程,就能够实现授权方法。那么接下来,我们采用代码方式来实现这个流程。

代码让AI扣 1812

iOS Hittest 机制和实际应用之一 hittest方法

hitTest的原理就是,当我们点击的时候,会触发 window的hittest方法,在该方法中会首先使用point inside方法判断点击的地方是否在window范围内,如果在的话,就倒序遍历姿子视图,然后将point转换为相对于子视图的point,然后在子视图再执行hittest,里面执行同样的流程。如果不在window范围内的话,就返回一个nil这里写下实现逻辑。

liubo的博客 1102

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

iOS 事件响应链机制 及 触摸事件(hitTest)

对于IOS设备用户来说,他们操作设备的方式主要有三种:触摸屏幕、晃动设备、通过遥控设施控制设备。对应的事件类型有以下三种: 1、触屏事件(Touch Event) 2、运动事件(Motion Event) 3、远端控制事件(Remote-Control Event) 响应者链条概念: iOS系统检测到手指触摸(Touch)操作时会将其打包成一个UIEvent对象,并放入当前

零纪年的专栏 1303

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

iOS【UIKit-iOS 事件分发机制(1)hitTest方法】

每当我们点击了一下iOS设备的屏幕,UIKit就会生成一个事件对象UIEvent,然后会把这个Event分发给当前active的app(官方原文说:Then it places the event object in the active app’s event queue.) 告知当前活动的app有事件之后,UIApplication 单例就会从事件队列中去取最新的事件,然后分发给能够处理

CoderZYWang 1955

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

iOS hitTest 机制用处之二-----使用pointInside方法

由上面的hittest机制可以知道,如果我们想扩大一个视图的点击范围,或者让一个超出父视图的子视图可以点击,我们既可以通过重写hittest方法实现,即在hittest 方法中去掉pointinside方法的判断,同时也可以通过重写pointinside 方法来实现。重写point inside ,如果是扩大点击范围,我们就判断新的rect是否包含point, 如果是子视图超出父视图可以点击,我们就将point转换为相对于子视图的point,然后判断是否在子视图中。扩大点击范围,或者是超出父视图可以点击,

liubo的博客 997

iOS-事件传递和响应机制

待完善

嘉达蒙的博客 1172

CYLTabBarController事件捕获机制详解:iOS底部导航栏点击事件处理终极指南

CYLTabBarController是一个功能强大的iOS底部导航栏库,它不仅提供了多样化的导航栏样式和动画效果,还具备完善的事件捕获与处理机制。本文将深入解析CYLTabBarController的事件捕获原理,帮助开发者快速掌握底部导航栏点击事件的处理方法,轻松实现自定义交互效果。 ### 一、事件捕获的基本流程 在iOS开发中,底部导航栏的点击事件通常通过UITabBarDelegate

gitblog_00727的博客 404

IOS事件传递之hitTest:withEvent - IOS开发...

原文  http://www.cnblogs.com/ioooooos/p/3617213.html 一、系统是怎么找到第一响应者的?  --只通过UIView及其子类查找 0 调用根视图的hitTtest:withEvent,其的执行过程如下: Ie calls pointInside:withEvent:of selfIf the return is NO,  hitTe

cctvzxxz1的专栏 677

IOS开发系列——UIView专题之三:自定义绘制篇

3UIView重绘机制3.1DrawRect机制3.1.1简介iOS的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要写一个扩展UIView的类,并重写drawRect方法,在这里进行绘图操作,程序会自动调用此方法进行绘图。重绘操作仍然在drawRect方法中完成,但是苹果不建议直接调用drawRect方法,当然如果你强直直接调用此方法,当然...

junbaozi的专栏 205

swing退出子窗口事件_iOS 事件(UITouch、UIControl、UIGestureRecognizer)传递机制

gitHub地址 : 响应链Demo文章有点长,如果只是想了解大概过程的,可以直接看后面的总结一.触摸、事件、响应者1. UITouch源起触摸一个手指一次触摸屏幕,就对应生成一个UITouch对象。多个手指同时触摸屏幕,生成多个UITouch对象。多个手指先后触摸,系统会根据触摸的位置判断是否更新同一个UITouch对象。若两个手指一前一后触摸同一个位置(即双击),那么第一次触摸时生成...

weixin_39816024的博客 241

ios触摸超出_解析iOS触摸事件响应机制(一)

iOS设备支持的用户操作事件有三种:Multitouch Event(多点触摸事件)Motion Event(设备运动事件)Remote Control Event(远程控制事件)其中最常用的就是多点触摸事件。一个触摸事件的响应过程如下:用户触摸屏幕时,UIKit会生成UIEvent对象来描述触摸事件。对象内部包含了触摸点坐标等信息。通过Hit Test确定用户触摸的是哪一个UIView。这个步骤...

weixin_31693025的博客 393

Flutter 官方正式解决 WebView 在 iOS 26 上有点击问题

可以看到,本次调整数据较大的底层变动,所以牵动的模块也比较多,这也是为什么这个 PR 一直拖到现在才合并的原因,因为需要考虑和测试的因素很多:而对于开发者来说,如果要引用修复,最好是通过增加对应的参数来支持配置,只针对有问题的场景使用,因为这怎么说也是一个底层大变更,会不会有新的问题还不好说。

恋猫de小郭的博客 1679

IOS事件传递之hitTest:withEvent

一、系统是怎么找到接收触摸事件发生的视图的? --只通过UIView及其子类查找   0 调用根视图的hitTtest:withEvent,其的执行过程如下: Ie calls pointInside:withEvent:of self If the return is NO,hitTest:withEvent:returnsnil. the end of the story. ...

weixin_30527323的博客 144

iOS UIView中hitTest:withEvent方法触摸的位置设置

#pragmamark在UIView视图结构中查找点击view的触摸事件 -(UIView*)hitTest:(CGPoint)pointwithEvent:(UIEvent*)event{ //如果不可以交互|隐藏|透明度太小3者任意一个都忽略不能点击 if(!self.userInteractionEnabled||s...

weixin_33737774的博客 323
上一篇: iOS事件响应链
下一篇: LLDB 调试相关
Leonardo_Fibonacci
博客等级 码龄10年 110粉丝 247原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值