hitTest:withEvent:和pointInside:withEvent:

Hadoop MapReduce电影用户性别预测:特征提取与朴素贝叶斯实现 大数据时代,如何从海量行为数据中挖掘用户属性是分布式计算与机器学习结合的典型场景。Hadoop MapReduce作为经典的离线批处理框架,通过分而治之的思想将大规模评分记录转化为可用特征,其分布式缓存与Shuffle机制为数据聚合提供了高效通道。在用户画像构建中,特征工程尤为关键,如基于MovieLens数据集提取类型评分均值、低分占比等行为指标,再借助朴素贝叶斯分类器完成性别预测。这一流程覆盖数据清洗、Join、聚合、模型训练与预测,不仅能够帮助理解MapReduce作业的Job编排与参数调优,也为推荐 阅读详情

hitTest:withEvent:方法的处理流程如下:

  1. 首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内;
  2. 若返回NO,则hitTest:withEvent:返回nil;
  3. 若返回YES,则向当前视图的所有子视图(subviews)发送hitTest:withEvent:消息,所有子视图的遍历顺序是从top到bottom,即从subviews数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕;
  4. 若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束;
  5. 如所有子视图都返回非,则hitTest:withEvent:方法返回自身(self)。

hitTest:withEvent:方法忽略隐藏(hidden=YES)的视图,禁止用户操作(userInteractionEnabled=YES)的视图,以及alpha级别小于0.01(alpha<0.01)的视图。如果一个子视图的区域超过父视图的bound区域(父视图的clipsToBounds 属性为NO,这样超过父视图bound区域的子视图内容也会显示),那么正常情况下对子视图在父视图之外区域的触摸操作不会被识别,因为父视图的pointInside:withEvent:方法会返回NO,这样就不会继续向下遍历子视图了。当然,也可以重写pointInside:withEvent:方法来处理这种情况。

对于每个触摸操作都会有一个UITouch对象,UITouch对象用来表示一个触摸操作,即一个手指在屏幕上按下、移动、离开的整个过程。UITouch对象在触摸操作的过程中在不断变化,所以在使用UITouch对象时,不能直接retain,而需要使用其他手段存储UITouch的内部信息。UITouch对象有一个view属性,表示此触摸操作初始发生所在的视图,即上面检测到的hit-test view,此属性在UITouch的生命周期不再改变,即使触摸操作后续移动到其他视图之上。

二.定制hitTest:withEvent:方法

如果父视图需要对对哪个子视图可以响应触摸事件做特殊控制,则可以重写hitTest:withEvent:或pointInside:withEvent:方法。

这里有几个例子:

  1. hitTest Hacking the responder chain
    在此例子中button,scrollview同为topView的子视图,但scrollview覆盖在button之上,这样在在button上的触摸操作返回的hit-test view为scrollview,button无法响应,可以修改topView的hitTest:withEvent:方法如下:
#pragma mark - hitTest
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    // 当touch point是在_btn上,则hitTest返回_btn
    CGPoint btnPointInA = [self.btnTest convertPoint:point fromView:self];
    if ([self.btnTest pointInside:btnPointInA withEvent:event])
    {
        return self.btnTest;
    }
    // 否则,返回默认处理
    return [super hitTest:point withEvent:event];
}

  1. 这样如果触摸点在button的范围内,返回hittestView为button,从button按钮可以响应点击事件。

  2. Paging-enabled UIScrollView with Previews
    BSPreviewScrollView 
    关于这两个例子,可以看之前文章的说明,见Paging-enabled UIScrollView
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    // 本View不响应用户事件
    return NO;
}


swift-iOS开发-事件传递与响应者链中的hitTest方法和pointInside方法 iOS开发-事件传递与响应者链中的hitTest方法和pointInside方法 立即下载

相关推荐

Windows Server+SqlServer Always On实战:5步搞定高可用集群搭建

本文详细介绍了在Windows Server环境中,通过5个关键步骤搭建SQL Server Always On高可用集群的实战指南。内容涵盖从底层故障转移集群配置、SQL Server实例启用Always On功能,到创建可用性组和侦听器的完整流程,并提供了核心运维与故障排查思路,帮助企业构建稳定可靠的数据库高可用架构。

milk5的博客 857

[转]hitTest:withEvent:方法流程

此方法可实现点击穿透、点击下层视图功能。 一.hitTest:withEvent:调用过程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application的事件队列,UIApplication会从事件队列中取出触摸事件并传递给key window(当前接收用户事件的窗口)处理,window对象首先会使用hitTest:withEvent:方法寻找此次Touch...

weixin_34195546的博客 340

解密GPT-5-Codex CLI安全最佳实践:从API Key保护到沙箱模式详解

本文深入解析GPT-5-Codex CLI在企业环境中的安全最佳实践,涵盖API Key全生命周期管理、沙箱模式配置及网络传输加固等核心防护策略。通过分层存储方案、动态环境变量加载和精细化权限设计,帮助开发团队构建企业级AI编程助手的安全防线,有效预防密钥泄露和未授权访问风险。

weixin_29309785的博客 585

响应者链条和hittest:WithEvent事件传递

事件的产生和传递(1).发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中(2).UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow)(3).主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件(通过hittest:withEvent:),这也是整个事件处理过程的第一步(4).找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理。

u013527885的博客 1861

戴维南和诺顿定理到底怎么选?一个实际维修案例讲透两种等效电路用法

本文通过工业电源模块维修案例,详细解析戴维南和诺顿定理在实际电路分析中的选择策略。针对电压敏感型故障、电流分配问题及功率传输异常,提供三大黄金法则,帮助工程师高效选择等效电路方法,提升故障排查效率。特别强调诺顿定理在电流分析中的优势。

weixin_31854867的博客 357

Python爬虫教程:抓取区块链交易信息及加密货币市场数据

随着区块链技术和加密货币的迅猛发展,区块链交易和加密货币市场的数据逐渐成为金融、技术、经济研究等领域的热点。对于开发者和研究者而言,实时获取区块链交易数据和加密货币市场行情,对于投资分析、市场预测、技术研究等具有重要的参考价值。本文将通过Python爬虫技术,介绍如何抓取区块链交易信息及加密货币市场数据,详细阐述数据获取的原理、技术方案、实现方法以及抓取到的数据的存储与分析。我们将依托最新的爬虫技术,如requestsSeleniumScrapy,以及相关的数据处理库(如pandasmatplotlib。

2201_76125261的博客 2777

hitTest:withEvent:调用过程

一. hitTest:withEvent:调用过程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application的事件队列,UIApplication会从事件队列中取出触摸事件并传递给key window(当前接收用户事件的窗口)处理,window对象首先会使用hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸

NightWish 1496

Orange3实战教程:实例---文本分类

我们可以使用预测模型按作者、类型、情感等对文档进行分类。在此工作流中,我们根据文档的Aarne Thompshon Uther索引对文档进行归类,这是故事的主题定义。我们使用两个简单的学习器,Logistic回归和朴素贝叶斯,两者都可以在诺谟图中检查。然后再从可视化分类中添加列线图组件,观察哪些词对逻辑回归最重要。也可以尝试使用在朴素贝叶斯模型上,并编辑连线属性。再从模型中添加朴素贝叶斯模型,以尝试不同的学习器。

err2008的专栏 384

hitTest:withEvent:方法

一。 则hitTest:withEvent:方法调用过程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动应用程序的事件队列,UIApplication会从事件队列中取出触摸事件并传递给关键窗口(当前接收用户事件的窗口)处理,窗口对象首先会使用hitTest:withEvent:方法寻找此次触摸操作初始点所在的视图(View),即需要触摸事件传递给其处理的视图,称之为hit-t

Lea__DongYang的博客 898

EPLAN 电气制图(六):结构盒与设备管理器核心概念(基础知识选看)

结构盒是 EPLAN 中用于标识元件安装位置的逻辑容器,非实际设备或黑盒,仅用于原理图中划分功能区域或物理位置(如 “柜内”“柜外”)。标识符设置:在 “显示设备标识符” 中输入位置代号(如 “+ 柜外”),完整格式为 “= 高层代号 + 位置代号”;筛选与定位:通过 “筛选器” 按类别(如电机、接触器)快速查找设备,右键 “转到(图形)” 可高亮定位图纸中的元件;设备保护:重要设备可启用保护(【项目数据】→【设备】→【启用设备保护】),防止误删除(显示橙色圆圈标记)。

电工 1056

ML.NET在工业上位机中的深度应用:如何用C#实现10ms级预测推理?

模型要“够用就好”:工业场景的规律往往不复杂,别迷信深度学习,FastTree、线性模型足够应付80%的场景,且速度快3-5倍;预处理“能省就省”:离线做90%的特征工程,实时只处理动态变化的10%,这是突破10ms的关键;代码“贴近硬件”:用struct、数组池、SIMD等“非托管技巧”写C#,避免GC成为实时性瓶颈;测试“模拟极端”:在目标工控机上用100%负载(同时跑PLC通信、运动控制、视觉检测)测试推理延迟,确保极端情况下仍达标。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 741

消息点击事件的响应链---hitTest:withEvent:方法

*当用户点击屏幕时,会产生一个触摸事件,系统会将触摸事件加入到 UIApplication管理事件队里中 *UIApplication 会从事件队列中取出最前面的事件进行分发以便处理,通常,先发送事件给应用程序主窗口(UIwindow0 *主窗口会调用 hitTest:withEvent:方法在视图(UIView)层次结构中找到一个最合适的 UIView来处理触摸事件 (hitTest:Lw...

weixin_30279315的博客 195

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深入理解iOS API系列(三)UiView事件传递相关函数:pointInside:withEvent:和hittest:withevent:

关于此API的说法网上总说纷纭,可以看看UIView的剖析(管蕾的《iOS8开发指南》第十六章抄袭来源)、hitTest:withEvent:方法流程 、为易于理解,模拟UIView的hitTest:方法和pointInside:方法的实现、ios的hitTest方法以及不规则区域内触摸事件处理方法、iOS触摸事件处理等文。 本文采信http://blog.chinaunix.net/uid-

Mamong's blog 1327

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

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

关于UIView的hitTest:withEvent:方法的理解

闲来无事 观摩别人的项目 常常发现对UIView的hitTest:withEvent:方法的重写,以前也查过这个方法的用法作用,但是时间一长又忘记了。今天再次看到,就记录一下. 用户触摸屏幕后事件的传递过程 当用户点击屏幕后,UIApplication先响应事件,然后传递给UIWindow。如果window可以响应。就开始遍历window的subViews。遍历的过程中,如果第一个遍...

ddiv24492的博客 261

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

模拟UIView的hitTest:方法和pointInside:方法的实现

对于UIView 的两个方法的讲解: - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 网上对这两个方法的讲解很多,但是大部分是纯文字的描述,我不再赘述,需要可以自己百度“UIView hitTest”

zhangping871的专栏 1391

UiView事件传递相关函数:pointInside:withEvent:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { }    这个函数的用处是判断当前的点击或者触摸事件的点是否在当前的view中。    它被hitTest:withEvent:调用,通过对每个子视图调用pointInside:withEvent:决定最终哪个视图来响应此事件。如果

majiakun1的专栏 4000

UIView的hitTest和pointInside方法

转载自:https://www.jianshu.com/p/c87de31b3985 官方描述 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event; Returns a Boolean value indicating whether the receiver contains the specified point...

沸腾的泪水的专栏 298

UIView的hitTest:方法和pointInside:方法的实现

处理原理如下: ? 当用户点击屏幕时,会产生一个触摸事件,系统会将该事件加入到一个由UIApplication管理的事件队列中 ? UIApplication会从事件队列中取出最前面的事件进行分发以便处理,通常,先发送事件给应用程序的主窗口(UIWindow) ? 主窗口会调用hitTest:withEvent:方法在视图(UIView)层次结构中找到一个最合适的UIView来处

博客 1115

iOS ---UIView的hitTest:方法和pointInside:

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34176694的博客 235

理解点击屏幕的事件响应--->对UIView的hitTest: withEvent: 方法的理解

要理解这两个方法。先了解一下用户触摸屏幕后的事件传递过程。 当用户点击屏幕后,UIApplication 先响应事件,然后传递给UIWindow。如果window可以响应。就开始遍历window的subviews。遍历的过程中,如果第一个遍历的view1可以响应,那就遍历这个view1的subviews(依次这样不停地查找,直至查找到合适的响应事件view)。如果view1不可以响应,那就开始对...

weixin_30429201的博客 109

理解点击屏幕的事件响应--->对- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法的理解...

要理解这两个方法。先了解一下用户触摸屏幕后的事件传递过程。 当用户点击屏幕后,UIApplication 先响应事件,然后传递给UIWindow。如果window可以响应。就开始遍历window的subviews。遍历的过程中,如果第一个遍历的view1可以响应,那就遍历这个view1的subviews(依次这样不停地查找,直至查找到合适的响应事件view)。如果view1不可以响应,那就开始对...

weixin_30765319的博客 665

上千个文件如何一次性批量重命名?PowerToys PowerRename 批量重命名完整指南

面对数百个需要统一去后缀、调序号顺序或规范大小写的文件,逐个手工修改不现实。微软免费开源的 PowerToys 工具集自带 PowerRename 批量重命名模块:写好一条规则,执行前可逐条预览每个文件的新名称,适合所有需要整理文件的用户。 ## PowerRename 首次上手步骤 1. 安装并运行 PowerToys,打开设置确认 PowerRename 模块处于启用状态(默认开启)。 2

gitblog_00495的博客 1018

hitTest

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { //把自己的点转成控件坐标系上的点 CGPoint currentPoint = [self convertPoint:point toView:self]; if ([_button pointInside:currentPoint w

SuYuMingXiangGuan的博客 572

UIView histTest:withEvent: 解析

转自:http://www.cnblogs.com/iosdev/archive/2012/12/11/2812254.html 首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内; 若返回NO,则hitTest:withEvent:返回nil; 若返回YES,则向当前视图的所有子视图(subviews)发送hitTest:withEvent:消

clwahaha的专栏 717
上一篇: NSRunloop的理解
下一篇: UITextField被软键盘遮挡的解决办法
一秀
博客等级 码龄14年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值