先上效果图:

之前没有研究过凸起这种效果,知道项目用到了 才来仔细研究,之前看似高大上的效果其实实现起来还是挺简单的。

自定义UITabbar:
只要代码都写在了layoutSubviews方法里,为了让拿到系统“UITabBarButton”的frame

- (instancetype)initWithBumpIndex:(NSInteger)index bumpHeight:(CGFloat)bumpHeight didTapBumpBarBlock:(DidTapBumpBarBlock)didTapBumpBarBlock{if (self = [super init]) {_index = index;_bumpHeight = bumpHeight;//凸起的高度_didTapBumpBarBlock = didTapBumpBarBlock;_arrTabBarButton = [NSMutableArray array];}return self;
}
- (void)layoutSubviews{[super layoutSubviews];for (id obj in self.subviews) {if ([obj isKindOfClass:NSClassFromString(@"UITabBarButton")]) {//一个可变数组保存所有的UITabBarButton按钮[_arrTabBarButton addObject:obj];}}/**
循环防止重复创建  也可以把roundView设置成全局的 把初始化方法写在UITabbar 的init方法里就不需要这个循环了
*/for (id obj in self.subviews) {if ([obj isKindOfClass:[UIControl class]]) {UIControl *view = obj;if (view.tag == 123456) {[view removeFromSuperview];}}}//_index是传进来的需要凸起的indexUIButton *button = _arrTabBarButton[_index];UIControl *roundView = [[UIControl alloc]initWithFrame:CGRectMake(button.x, -_bumpHeight, button.width, button.width)];roundView.tag = 123456;roundView.layer.cornerRadius = roundView.height*0.5;roundView.clipsToBounds = YES;roundView.backgroundColor = [UIColor whiteColor];[roundView addTarget:self action:@selector(tapControl:) forControlEvents:UIControlEventTouchUpInside];[self insertSubview:roundView atIndex:0];
}
//凸起部分的点击事件
- (void)tapControl:(UIControl *)control{if (_didTapBumpBarBlock) {_didTapBumpBarBlock();}
}
//由于凸起部分在UITabbar frame外 使用该方法解决不能点击到
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{//如果不加上这个判断,当push到其他页面点击这个位置也会响应if (!self.hidden) {UIControl *roundView = [self viewWithTag:123456];if (CGRectContainsPoint(roundView.frame, point)) {return roundView;}}return [super hitTest:point withEvent:event];
}

over!

iOS Tabbar凸起效果相关推荐

  1. iOS TabBar中间凸起实践

    先看下效果: 简单的说下大致结构和思路吧 tabbar的话也是遵循主流,自定义一个继承自系统UITabbar的HQTabbar,然后用KVC和系统的进行替换中间的凸起按钮和tabbar内部的子控件不是 ...

  2. 底部导航栏的凸起效果

    微信小程序开发教程.开发教学 本视频为1-1号视频,做出了底部导航栏的凸起效果 第一次做视频,希望大家多多支持- 组件源码+项目源码: 链接:https://pan.baidu.com/s/1EkZx ...

  3. iOS tabbar 图片,最佳大小方式

    iOS tabbar 图片,最佳大小方式 文档大小 30 *30 retaina 60 *60 最佳大小 48 *32 参考:http://stackoverflow.com/questions/15 ...

  4. ios APP加密探究几维安全iOS 代码混淆效果参考

    几维安全ios代码混淆效果参考: 什么是加密 加密是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作.大多数病毒就是基于此原理. 加密作用 加壳的程序可以有效阻止对程序 ...

  5. 防ios的抽屉效果,防qq的抽屉效果

    AS中导入GitHub开源项目SlidingMenu总结,我开始AS导入SlidingMenu的时候也百度了很多文章,写的都不是很详细,所以导入成功后,写了这篇文章,希望对想用AndroidStudi ...

  6. 移动端阻止ios弹性滑动_移动端iOS阻止橡皮筋效果

    一.遇到的问题 移动端开发中,iOS的微信浏览器也好.Safari也好在浏览网页的时候会出现橡皮筋效果.就是当页面拉到尽头的时候还能再继续拉动,露出浏览器的底色,松手会回弹回去. 微信浏览器: Saf ...

  7. Flutter 凸起效果底部导航栏一

    大多app中都会带有底部导航栏,系统默认自带的导航条不够新颖.今天我们改造一下导航条,将中间的按钮起到凸起的效果,特别有的app,中间常用扫一扫功能. Flutter为我们提供了一个控件BottomN ...

  8. 元素凸起效果_被誉为作物“生殖元素”的“硼”到底有多重要?看完你就明白了...

    哈喽,大家好!这里是种地人!今天我们聊聊"硼"! "硼元素"可能很多种植户朋友几乎都没有用过!其实作物生长所需要的大中微量元素一共有16种.硼元素作为农作物生长 ...

  9. iOS 转盘动画效果实现

    代码地址如下: http://www.demodashi.com/demo/11598.html 近期公司项目告一段落,闲来无事,看到山东中国移动客户端有个转盘动画挺酷的.于是试着实现一下,看似简单, ...

最新文章

  1. PLSQ执行同样的sql,使用mybatis进行动态拼装执行的时候非常慢的问题解决
  2. webpack 项目使用webpack-dev-server 自动编译 (2)
  3. c语言class运行错误,win32 C RegisterClass失败,该如何处理
  4. JAVA配置注解方式搭建简单的SpringMVC前后台交互系统
  5. 【Python】merge:数据规整化:清理、转换、合并、重塑
  6. HTML5 使用 JS 生成二维码,带头像
  7. lombok链式调用_使用Lombok翻车了
  8. Martin Fowler:数字化时代,远程与本地协同工作孰优孰劣?| IDCF
  9. scrum–yesterday once more
  10. python播放音乐同步歌词_使用Python下载歌词并嵌入歌曲文件中的实现代码
  11. 软件设计原则:内聚、耦合有哪几种类型?内聚度、耦合度如何比较?
  12. DB2数据库备份恢复
  13. 【docker】安装教程
  14. 认识大数据分析的四大误区
  15. MATLAB算法实战应用案例精讲-【智能优化算法】蝙蝠算法-BA(附MATLAB和Python代码)
  16. 七号信令:信令网基本概念
  17. android 自定义Preference CheckBoxPreference ListPreference的用法
  18. TF-IDF算法介绍及实现
  19. 同比 数据模型 环比_同比和环比计算公式?
  20. sql中的left join 查询

热门文章

  1. CFI/CFG 安全防护原理详解
  2. 台式电脑计算机的内存叫什么,电脑内存和硬盘有什么区别 电脑内存和硬盘区别介绍【详解】...
  3. 【学习笔记】Mac下用android studio创建安卓模拟器
  4. 虚幻引擎5 AR开发教程02:构建和测试AR Android App
  5. 汇编push,pop
  6. An Unsupervised Representation to Predict the Future of Patients from the Electronic Health Records
  7. 浮点数c语言,C语言的浮点数应该如何表示详细方法说明
  8. JAVA:实现求Average平均数算法(附完整源码)
  9. linux下五颜六色的文件——具体含义
  10. 俄罗斯方块游戏的设计与实现(Java+Swing+Eclipse)