先看下效果:
简单的说下大致结构和思路吧
tabbar的话也是遵循主流,自定义一个继承自系统UITabbar的HQTabbar,然后用KVC和系统的进行替换中间的凸起按钮和tabbar内部的子控件不是同一类型,是一个UIButton而已,根据tabbar内部子控件的类型去调整内部子控件的位置,从而腾出一个中间位置给凸起按钮给tabbar弄一个代理,添加一个点击中间凸起按钮的代理方法,让HQTabBarController成为它的代理,实现对应代理方法即可实现按钮点击。
如果对以上步骤有不清楚的地方可以看代码或者随时咨询我哦,这篇文字主要讲的核心就是中间按钮点击:
- 要想监听整个发布按钮的点击,包括凸起部分点击也有反应,那么我是通过在自定义的LBTabbar内部重写- (UIView
*)hitTest:(CGPoint)point withEvent:(UIEvent *)even方法来实现的 - 我们都知道,凸起按钮是自定义的LBTabbar的子控件,默认情况下子控件尺寸如果超出父控件,那么超出的部分点击是没有反应的
- hitTest这个方法就是专门返回一个处理响应事件最合适view的,一般情况下我们不实现这个方法,默认就是让系统帮我们去判断处理事件响应最合适的view,一旦我们想要改变一下这种情况,我们就需要通过重写这个方法
- 我们的需求是只要我们点击的point在凸起按钮的任何位置(无论是否超出tabbar)都可以有响应&