ios hitTest及扩展---分解ZFPlayer
核心1. 介绍
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event point :
在接收器的局部坐标系(界)中指定的点。 event : 系统保证调用此方法的事件。
如果从事件处理代码外部调用此方法,则可以指定nil。 returnValue : 视图对象是当前视图和包含点的最远的后代。
如果点完全位于接收方的视图层次结构之外,则返回nil。
目的在于 : 在视图的层次结构中寻找一个最适合的 view 来响应触摸事件。
核心2.
调用顺序:touch -> UIApplication -> UIWindow -> UIViewController.view -> subViews -> ....-> 合适的view
事件传递顺序:view -> superView ...- > UIViewController.view -> UIViewController -> UIWindow -> UIApplication -> 事件丢弃
扩展1. subview超出fatherView的bounds仍然需要响应点击事件
/*
Case1: 点击button1 & button2 不在self的区域都有效
*/
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
//1.判断自己能否接收事件
if(self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) {
return nil;
}
// 这里无需判断point是否在父View的bounds内,因为middleButton和rightButton部分区域超出的父View
for (UIView *subview in [self.subviews reverseObjectEnumerator]) {
CGPoint convertedPoint = [subview convertPoint:point fromView:self];
UIView *hitTestView = [subview hitTest:convertedPoint withEvent:event];
if (hitTestView) {
return hitTestView;
}
}
return self;
}
/*
Case2: 点击button1不在self的区域《无》效
点击button2不在self的区域《有》效
*/
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
//1.判断自己能否接收事件
if(self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) {
return nil;
}
CGPoint newPoint = [self convertPoint:point toView:button2];
if ([button2 pointInside:newPoint withEvent:event]) {
return button2;
}
return [super hitTest:point withEvent:event];
}
参考资料:https://blog.csdn.net/qq_18505715/article/details/78411052
转载于:https://www.cnblogs.com/madaha/p/9685180.html
ios hitTest及扩展---分解ZFPlayer相关推荐
- ios 手势交互控制---分解ZFPlayer
核心1. 多种手势嵌套 单击:UITapGestureRecognizer *singleTap; // 一般处理 播放控制页面显示/隐藏 双击:UITapGestureRecognizer *d ...
- ios 按位运算---分解ZFPlayer
按位与&(位运算时,相同为1,不同为0) 按位或 |(位运算时,有1为1,全0为0) 按位异或 ^(位运算时,相同为0,不同为1) 按位取反~(0变1,1变0) 左移< 把整数a的各二 ...
- ios 视频列表处理---分解ZFPlayer
1.视频播放器添加到containerView的机制与一个普通播放器页面的不同 普通视频播放页面可以直接添加一个播放器,按照正常逻辑播放.暂停.切换等操作,而视频列表的做法是 用户触发播放动作 当点击 ...
- 开发腾讯移动游戏平台SDK ios版Ane扩展 总结
本文记录了在开发 腾讯移动游戏平台SDK(MSDK) ios版Ane扩展 过程中所遇到的问题 文中非常多问题都是基础的问题.对object c和xcode配置了解不深入导致的.(没办法,开发ane的程 ...
- iOS学习系列 - 扩展机制category与associative
iOS学习系列 - 扩展机制category与associative category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方 ...
- iOS App添加扩展App Extension
主要参考文章 : https://www.cnblogs.com/fengmin/p/6118592.html demo地址,里面额外添加了一个分享的扩展 : https://github.com ...
- WWDC 2014 Session笔记 - iOS 通知中心扩展制作入门
转自:http://onevcat.com/2014/08/notification-today-widget/ 总览 扩展 (Extension) 是 iOS 8 和 OSX 10.10 加入的一个 ...
- iOS 通知中心扩展制作入门
from:http://onevcat.com/2014/08/notification-today-widget/ 扩展 (Extension) 是 iOS 8 和 OSX 10.10 加入的一个非 ...
- iOS开发--iOS通知中心扩展制作入门(iOS Extensions)
个人笔记: 通知中心扩展,相当于一个特殊的独立的App存在.他和主App之间通讯可以通过OpenURL来实现.而在通知中心内部,像App一样,该咋样还是咋样(如异步网络请求, 自动布局等). 之所以 ...
最新文章
- 引用计数(Reference Counting)和代理(Proxy)的应用
- 如何提高创作型任务的效率?
- CodeForces 811B Vladik and Complicated Book
- Mixing ASP.NET MVC and Webforms
- IBM HTTP Server Websphere Plugin
- *【CF#633B】 A Trivial Problem(二分或枚举)
- c语言08,标准C语言08_01.doc
- shell字符串长度
- init_MUTEX被废除
- bzoj2655 calc
- MT4外汇操盘跟单软件
- 抄书——最优化的理论与方法(5)——数学基础(凸集和凸函数)
- java打印ascii码_JAVA实现打印ascii码表代码
- いろいろな%前端开发面试题% 读后感
- [转]计算机编程语言的入门学习
- 优锘科技:数字孪生为何大爆发?
- gvim for verilog简易配置
- 单连通图(算法导论22.3-12)
- linux远程桌面方式,Linux 远程桌面的两种方式
- kaggle可插拔tta应用记录
热门文章
- WITH AS【原创】
- FusionCharts Free(3)
- 黄金——家家都应藏有的投资品(转载自新浪)
- 华为机器狗 VS 波士顿狗,谁更胜一筹?
- idea中刷新项目快捷键_解决 IDEA 使用过程中让你觉得不爽的一些问题
- centos安装python3小白_Centos7 安装Python3
- Java---模拟图灵机的运行过程
- python3.7界面设计_基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架
- JSP页面中<%!%>与<%%>与<%=%>
- 【Spring注解】@Condition条件注册