推荐一篇非常好的集成各种UITabBar的三方库 《点击这里直取demo》

另外一篇根据runtime定制了一款可以出轨的UITarBar 《Runtime实战之定制TabBarItem大小》

点击view的触发机制《iOS事件分发机制(一) hit-Testing》

摘自:

UIView中提供两个方法用来确定hit-testing View,如下所示 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event; // recursively calls -pointInside:withEvent:. point is in the receiver's coordinate system

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event; // default returns YES if point is in bounds

当一个View收到hitTest消息时,会调用自己的pointInside:withEvent:方法,如果pointInside返回YES,则表明触摸事件发生在我自己内部,则会遍历自己的所有Subview去寻找最小单位(没有任何子view)的UIView,如果当前View.userInteractionEnabled = NO,enabled=NO(UIControl),或者alpha<=0.01, hidden等情况的时候,hitTest就不会调用自己的pointInside了,直接返回nil,然后系统就回去遍历兄弟节点。简而言之,可以写成这样

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (self.alpha <= 0.01 || !self.userInteractionEnabled || self.hidden) {
return nil;
}
BOOL inside = [self pointInside:point withEvent:event];
UIView *hitView = nil;
if (inside) {
NSEnumerator *enumerator = [self.subviews reverseObjectEnumerator];
for (UIView *subview in enumerator) {
hitView = [subview hitTest:point withEvent:event];
if (hitView) {
break;
}
}
if (!hitView) {
hitView = self;
}
return hitView;
} else {
return nil;
}
}

  

最新文章

  1. CI框架整合yar
  2. HDU 1789 Doing Homework again(贪心)
  3. 二、JavaScript语言--JS基础--JavaScript进阶篇--JS基础语法
  4. 使用RMAN对控制文件进行restore
  5. Apache FtpServer扩展【动手实现自己的业务】
  6. 论文阅读(2014-2)----The YouTube Video Recommendation System
  7. SQLSERVER复制表的方法
  8. TabBarController创建及使用方法简介
  9. Android手机适配——UI图片适配
  10. NSDate的处理:前一天、后一天等关于时区偏移的处理以及在数据库中的使用
  11. 最简单的linux内存清理方法
  12. HUST 1584 摆放餐桌
  13. Vulkan Tutorial 02 编写Vulkan应用程序框架原型
  14. C#Npoi
  15. 2017-2018年Scrum状态调查报告
  16. java面试——问题回溯
  17. [CSL 的字符串][栈,模拟]
  18. HDU 1029 Ignatius and the Princess IV / HYSBZ(BZOJ) 2456 mode(思维题,~~排序?~~)
  19. div等比例缩放-------纯CSS实现自适应浏览器宽度的正方形
  20. beego注解路由 [自定义方法]

热门文章

  1. 关于torch.nn.Linear的笔记
  2. Palette 的使用
  3. mint linux的几个问题
  4. maxima画图
  5. windows下使用mysqlbinlog做数据恢复时出现mysqlbinlog: File &#39;D:\MariaDB&#39; not found (Errcode: 2)
  6. 吴裕雄--天生自然MySQL学习笔记:MySQL 处理重复数据
  7. UML-GRASP后4种模式
  8. P1618 三连击(升级版)
  9. hadoop cmd
  10. template.js的介绍