码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • [iOS开发]iOS中TabBar中间按钮凸起的实现


    在日常使用app的过程中,经常能看到人家实现了底部分栏控制器的中间按钮凸起的效果,那么这是怎么实现的呢?

    效果演示:

    请添加图片描述

    实现原理:

    创建按钮

    创建一个UITabBar的子类,重写它的layoutSubviews方法:

    - (void)layoutSubviews {
        [super layoutSubviews];
        CGFloat width = self.bp_width;
        // 添加发布按钮
        [self addSubview:self.publishButton];
        self.publishButton.center = CGPointMake(width * 0.5, 0);
        // 按钮索引
        int index = 0;
        // tabBar上按钮的尺寸
        CGFloat tabBarButtonW = (width - publishButtonWidth) / 2;
        CGFloat tabBarButtonH = [UIDevice bp_tabBarHeight];
        CGFloat tabBarButtonY = 0;
        // 设置TabBarButton的frame
        for (UIView *tabBarButton in self.subviews) {
            if (![NSStringFromClass(tabBarButton.class) isEqualToString:@"UITabBarButton"]) {
                continue;
            }
            // 计算按钮的X值
            CGFloat tabBarButtonX = index * tabBarButtonW;
            if (index == 1) { // 给下一个个button增加一个publushButton宽度的x值
                tabBarButtonX += publishButtonWidth;
            }
            // 设置按钮的frame
            tabBarButton.frame = CGRectMake(tabBarButtonX, tabBarButtonY, tabBarButtonW, tabBarButtonH);
            // 增加索引
            index++;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    方法里面对原有的tabBarButton的位置进行调整,以便把自己加上去的按钮插入到中间,把center位置设置成tabBar上沿的中间位置。

    扩大点击范围

    按钮加上去后,发现点击超出tabBar范围的位置,按钮无法响应,所以,需要重写hitTest方法,扩大响应范围:

    // 重写扩大响应范围
    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
       if (self.isHidden == NO) {
           CGPoint newPoint = [self convertPoint:point toView:self.publishButton];
           if ([self.publishButton pointInside:newPoint withEvent:event]) {
               return self.publishButton;
           }
       }
        return [super hitTest:point withEvent:event];
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    这样,这个中间凸起的按钮就做好了!

  • 相关阅读:
    有关前端性能优化的大全—Vue 代码层面性能优化+Webpack 层面的优化+基础的 Web 技术优化+非框架代码优化
    java毕业设计病房管理系统mybatis+源码+调试部署+系统+数据库+lw
    吡喃腈衍生物
    mysql 数据库使用分享(多图解析)
    golang之context实用记录
    char*加上一个整数会发生什么?
    一文看懂推荐系统:Gate网络(一):新浪微博GateNet,GateNet就是想用attention的方法去搞,和SENet一样,都是张俊林的杰作
    计算机组成原理-数据的运算
    基于javaweb的鲜花商城系统(java+jsp+javascript+bootstrap+mysql)
    嵌入式开发:比较顶级嵌入式GUI解决方案
  • 原文地址:https://blog.csdn.net/weixin_52192405/article/details/134224465
  • 最新文章
  • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
    SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
    不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
    Halo插件:支持GitHub的图床附件策略
    电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
    华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
    软件更好写之后口碑会更重要
    大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
    Java标签跳转:一个鲜为人知但却很实用的小技巧
    多智能体系统论文速读
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号