登录 当即注册
金钱:

Code4App-188bet注册-iOS 开源代码库-188bet官网实例查找-iOS特效示例-188bet官网比如下载-Code4App.com

188bet uedbet 威廉希尔 明升 bwin 明升88 bodog bwin 明升m88.com 18luck 188bet unibet unibet Ladbrokes Ladbrokes casino m88明升 明升 明升 m88.com 188bet m88 明陞 uedbet赫塔菲官网 365bet官网 m88 help

iOS-TabBar中心凸起点击彻底有反响

[仿制链接]
来自: 李世铿 分类: iOS精品源码 上传时刻: 2016-6-1 18:35:55
Tag:iOS TabBar UIButton 按钮 点击 TabBar

项目介绍:

  • 为什么还要继续说这个内容呢?
    • 前一段微博上很火的tabbar封装大赛想必咱们都知道吧,各位大神尽其所能
    • 自己正在仿写闲鱼,看了网上一些朋友写的关于tabbar中心按钮的处理,发现关于处理中心按钮的点击这块有点含糊
    • 个人估量是咱们在写这一块的时分疏忽了这个细节
      • 有的是中心按钮凸起的部分点击没有反响,按钮其他当地能够点击
      • 有的是中心凸起按钮能够彻底点击了,可是没有做细节处理,导致push到其他页面,在和凸起按钮相同的方位还能够被点击,并且点击效果和点击凸起按钮效果是相同的  
      • 还有的是尽管完成了功用,可是处理办法上并不是很完善


因而决议熬夜写下这篇文章,协助有需求的朋友看一下
  • 忽然感觉没有什么可说的了,哈哈,主要是我代码里边现已写得十分详细了,并且文字多了效果也欠好
  • 简略的说下大致结构和思路吧
    • tabbar的话也是遵从干流,自定义一个承继自体系UITabbar的LBTabbar,然后用KVC和体系的进行替换
    • 中心的凸起按钮和tabbar内部的子控件不是同一类型,是一个UIButton罢了
    • 依据tabbar内部子控件的类型去调整内部子控件的方位,然后腾出一个中心方位给凸起按钮
    • 给tabbar弄一个署理,增加一个点击中心凸起按钮的署理办法,让LBTabBarController成为它的署理,完成对应署理办法即可完成按钮点击
    • 假如对以上过程有不清楚的当地能够看代码或许随时咨询我哦,这篇文字主要讲的中心便是中心按钮点击
      1)要想监听整个发布按钮的点击,包含凸起部分点击也有反响,那么我是经过在自定义的LBTabbar内部重写- (UIView *)hitTestCGPoint)point withEventUIEvent *)even办法来完成的
      2)咱们都知道,凸起按钮是自定义的LBTabbar的子控件,默许状况下子控件尺度假如超出父控件,那么超出的部分点击是没有反响的
      3)hitTest这个办法便是专门回来一个处理呼应事情最合适view的,一般状况下咱们不完成这个办法,默许便是让体系帮咱们去判别处理事情呼应最合适的view,一旦咱们想要改动一下这种状况,咱们就需求经过重写这个办法
      4)咱们的需求是只需咱们点击的point在凸起按钮的任何方位(不管是否超出tabbar)都能够有呼应,那么咱们首要需求判别这个point是否在凸起按钮自身上
      [self convertPoint:point toView:self.plusBtn]
      这句代码便是将当时tabbar的接触点转化坐标系,转化到凸起按钮的身上,它会生成一个新的点,然后咱们经过
      [self.plusBtn pointInside:newP withEvent:event]办法判别假如这个新的点是在发布按钮身上,那么处理点击事情最合适的view便是发布按钮,不然直接让体系帮咱们处理点击事情就能够了
      5)对了,这儿还有一步也是十分要害,由于咱们重写了寻觅最合适view的办法,那么咱们还需求考虑什么状况下咱们需求由咱们自己挑选最合适的view,什么状况下不需求,所以咱们需求加一个判别if (self.isHidden == NO),
      这句代码代表了当时页面是有tabbar的,那么肯定是在导航控制器的根控制器页面,这个时分就需求由咱们自己挑选最合适的view,其他的push页面直接让体系挑选
      6)假如不做第五步判别,bug便是由导航控制器的根控制器页面push到其他页面后,点击该页面和tabbar凸起按钮相同的方位也会有反响
      7)好了,该上要害代码了

[Objective-C] 检查源文件 仿制代码
//重写hitTest办法,去监听发布按钮的点击,意图是为了让凸出的部分点击也有反响
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    //这一个判别是要害,不判别的话push到其他页面,点击发布按钮的方位也是会有反响的,这样就欠好了
    //self.isHidden == NO 阐明当时页面是有tabbar的,那么肯定是在导航控制器的根控制器页面
    //在导航控制器根控制器页面,那么咱们就需求判别手指点击的方位是否在发布按钮身上
    //是的话让发布按钮自己处理点击事情,不是的话让体系去处理点击事情就能够了
    if (self.isHidden == NO) {

        //将当时tabbar的接触点转化坐标系,转化到发布按钮的身上,生成一个新的点
        CGPoint newP = [self convertPoint:point toView:self.plusBtn];

        //判别假如这个新的点是在发布按钮身上,那么处理点击事情最合适的view便是发布按钮
        if ( [self.plusBtn pointInside:newP withEvent:event]) {
            return self.plusBtn;
        }else{//假如点不在发布按钮身上,直接让体系处理就能够了
          return [super hitTest:point withEvent:event];
     }
   } 
    else {//tabbar躲藏了,那么阐明现已push到其他的页面了,这个时分仍是让体系去判别最合适的view处理就好了
        return [super hitTest:point withEvent:event];
    }
}


下面是排布tabbar里边的子控件的
[Objective-C] 检查源文件 仿制代码
- (void)layoutSubviews
{
    [super layoutSubviews];
    //体系自带的按钮类型是UITabBarButton,找出这些类型的按钮,然后从头排布方位,空出中心的方位
    Class class = NSClassFromString(@"UITabBarButton");

    self.plusBtn.centerX = self.centerX;
    //调整发布按钮的中线点Y值
    self.plusBtn.centerY = self.height * 0.5 - 2*LBMagin ;

    self.plusBtn.size = CGSizeMake(self.plusBtn.currentBackgroundImage.size.width, self.plusBtn.currentBackgroundImage.size.height);


        UILabel *label = [[UILabel alloc] init];
        label.text = @"发布";
        label.font = [UIFont systemFontOfSize:11];
        [label sizeToFit];
        label.textColor = [UIColor grayColor];
        [self addSubview:label];
        label.centerX = self.plusBtn.centerX;
        label.centerY = CGRectGetMaxY(self.plusBtn.frame) + LBMagin ;



    int btnIndex = 0;
    for (UIView *btn in self.subviews) {//遍历tabbar的子控件
        if ([btn isKindOfClass:class]) {//假如是体系的UITabBarButton,那么就调整子控件方位,空出中心方位
            //每一个按钮的宽度==tabbar的五分之一
            btn.width = self.width / 5;

            btn.x = btn.width * btnIndex;

            btnIndex++;
            //假如是索引是2(从0开端的),直接让索引++,意图便是让音讯按钮的方位向右移动,空出来发布按钮的方位
            if (btnIndex == 2) {
                btnIndex++;
            }

        }
    }
}


  • OK,完毕了,不足之处欢迎咱们纠正,一同学习(https: // github.com/LBCoderLee/iOS_XianYu)


DEMO下载:



文/小小小阿博er(简书作者)



相关源码引荐:

我来说两句
一切谈论(2511)
李世铿 2016-6-1 18:37:21
精华内容,楼主V5!
回复
[email protected] 2016-6-1 20:49:56
淡定,淡定,淡定……
回复
雷浚哲 2016-6-1 21:41:37
虽不明,但觉厉!
回复
yangxl 2016-6-1 23:16:55
很给力,Code4App有你更精彩!
回复
xwCoder 2016-6-2 01:08:02
精华内容,楼主V5!
回复
xwCoder 2016-6-2 01:20:38
做的很美观!!很喜欢!!!排版 布局都很明晰!!努力学习ing....虽不明,但觉厉!
回复
jiankian 2016-6-2 08:09:15
很给力,Code4App有你更精彩!
回复
半吱湮 2016-6-2 08:21:31
很给力,Code4App有你更精彩!
回复
半吱湮 2016-6-2 08:22:14
楼主威武啊,Code4App有你更给力!
回复
提取码:  下载次数:1880 状况:已购或VIP 价格:0(原价:10)金钱 下载权限:初级码农 
40284 10 1880
联络咱们
主页/微信大众账号投稿

帖子代码修改/版权问题

QQ:435399051,742864542

怎么取得代码达人称谓?

代码奉献英雄榜
用户名 下载数
经过邮件订阅最新 Code4App 信息
上一条 /4 下一条

广告投进| 广东互联网违法和不良信息告发中心|我国互联网告发中心|Github|请求友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 回来顶部 回来列表