新浪微博客户端(59)-hitTest withEvent方法的使用说明
iOS中的触摸事件总是由最顶层的View首先得到的,当这个View得到该触摸事件的时候可以选择通过
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
return YES;
}
方法来决定是否由当前控件来消费掉触摸事件,YES代表由当前控件消费,事件则不再向下传递;No代表事件继续向下传递。与android里面的onTouchEvent返回布尔值类似。
当我们决定由当前控件来消费掉此事件时,还可以进一步决定由当前控件的哪一个子控件(包括自身)来消费掉此触摸事件,为此苹果提供了下列方法
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return self.redView;
}
通过指定返回的View来告诉操作系统,具体由哪一个控件来消费掉触摸事件。
示例代码:
在Xcode中创建两个自定义View,GreenView和RedView
GreenView.m
#import "GreenView.h"
#import "RedView.h" @interface GreenView() @property (nonatomic,weak) UIView *redView; @end @implementation GreenView - (void)awakeFromNib { self.backgroundColor = [UIColor greenColor]; RedView *redView = [[RedView alloc] init];
redView.frame = CGRectMake(, , , );
[self addSubview:redView];
self.redView = redView; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { NSLog(@"GreenView 被点击"); }
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { return self.redView; } @end
RedView.m
#import "RedView.h" @implementation RedView - (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) { self.backgroundColor = [UIColor redColor]; }
return self;
} - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { NSLog(@"RedView 被点击..."); } @end
为简化操作,将默认的storyboard中创建的View,修改为GreenView:

项目目录:

我们在GreenView中添加了如下代码,保证当GreenView收到触摸事件时,转交给RedView来处理:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return self.redView;
}
运行:

此时,我们可以点击绿色的任意区域,发现系统打印的Log已经变成:

说明我们已经成功的将GreenView的触摸事件交给RedView来处理了。
新浪微博客户端(59)-hitTest withEvent方法的使用说明的更多相关文章
- 消息点击事件的响应链---hitTest:withEvent:方法
*当用户点击屏幕时,会产生一个触摸事件,系统会将触摸事件加入到 UIApplication管理事件队里中 *UIApplication 会从事件队列中取出最前面的事件进行分发以便处理,通常,先发送事件 ...
- 响应者链 hittest:withEvent: 方法的使用
关于响应者链部分的基础内容 参考http://www.cnblogs.com/wendingding/p/3795171.html 这里我要说明的是 关于- (UIView *)hitTest:(CG ...
- hitTest:withEvent:方法(此方法可实现点击穿透、点击下层视图功能)
此方法可实现点击穿透.点击下层视图功能 一. hitTest:withEvent:调用过程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application的事件队列,UIAppl ...
- hitTest:withEvent:方法流程
此方法可实现点击穿透.点击下层视图功能. 一. hitTest:withEvent:调用过程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application的事件队列,UIApp ...
- 关于UIView的hitTest:withEvent:方法的理解
闲来无事 观摩别人的项目 常常发现对UIView的hitTest:withEvent:方法的重写,以前也查过这个方法的用法作用,但是时间一长又忘记了.今天再次看到,就记录一下. 用户触摸屏幕后事件的传 ...
- 理解点击屏幕的事件响应--->对UIView的hitTest: withEvent: 方法的理解
要理解这两个方法.先了解一下用户触摸屏幕后的事件传递过程. 当用户点击屏幕后,UIApplication 先响应事件,然后传递给UIWindow.如果window可以响应.就开始遍历window的su ...
- 点击事件处理, 以及hitTest:withEvent:实现
发送触摸事件后, 系统会将事件添加到系统UIApplication的事件管理队列中 UIApplication会在事件队列的最前端取出事件,然后分发下去,以便处理, 通常会把事件首先分发给KeyWin ...
- 新浪微博客户端开发之OAuth认证篇
新浪微博客户端开发之OAuth认证篇 2013年7月29日新浪微博客户端开发 OAuth2.0授权机制我在这里就不浪费口舌了,有很多大牛都发表过相关的文章解释OAuth2.0认证的流程,我就随便找了一 ...
- UITableView/UIScrollView 不能响应TouchBegin 的处理 及窥见 hitTest:withEvent:
重写touchBegin 方法是不行的,在UITableView/UIScrollView 解决方案 重写hitTest:withEvent: 在他们的子类中 - (UIView *)hitTest ...
随机推荐
- Android中对内存和外存的读写
首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. public ...
- 用 phylomatic 软件生成的进化树
用 phylomatic 软件生成的进化树 Phylomatic是在线软件,可以利用植物名录,按照APGIII的被子植物科的拓扑结构,生成进化树. 参考 张金龙博士 工作目录 setwd(" ...
- oracle 11g 新特性UTL_TCP、UTL_HTTP 和 UTL_SMTP程序包发邮件
首先,创建一个 ACL: begindbms_network_acl_admin.create_acl (acl => 'utlpkg.xml', ---创建的访问控制列 ...
- 【poj1260】 Pearls
http://poj.org/problem?id=1260 (题目链接) 题意 购买珍珠,所有珍珠分成n个档次,第i个档次购买每个珍珠的价格为p[i],需要购买第i档次的珍珠a[i]个.若要购买第i ...
- 【bzoj1503】 NOI2004—郁闷的出纳员
http://www.lydsy.com/JudgeOnline/problem.php?id=1503 (题目链接) 题意 要求维护4种操作:插入一个数,将所有数加上k,将所有数减去k,删去数值小于 ...
- poj1811 数论
题意:判断一个数是否是质数+分解质因数 sol:模板题 分解质因数用xudyh模板,注意factor返回的是无序的,factorG返回是从小到大的顺序(包括了1) 判断质数用kuangbin随机化模板 ...
- nand以及yaffs2
用的是tiny210+1312的SDK,友善之臂给的文件系统居然有300多兆,烧写系统可是要人命了,那个等啊...所以,想着把系统给做小一点.和其他一样,我的知识仅限于理论阶段,嘿嘿.今天实践一下. ...
- C#读txt文件并写入二维数组中(txt数据行,列未知)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- django入门记录 1
步骤: 1 安装python和django 2 创建项目python-admin startproject mysite(此处可以替换) 3 至少需要一个数据表,所以要创建一个表 python ...
- hibernate基础增删查改简单实例
hibernate 基础理论知识网上很多,可以百度和google.这里不做多的介绍,以一个User表来开展例子 建一个web-project 我这里用了junit单元测试环境来进行增删查改的测试,别的 ...