当前位置: 首页 > 编程日记 > 正文

ESTabBarController

为什么要使用?

在开发工作中,我们可能会遇到需要自定义UITabBar的情况。例如:改变文字样式、添加一些动画效果、设置一个比默认更大的样式等等,以上需求如果只通过UITabBarItem往往很难实现。

有了ESTabBarController,你可以轻松地实现这些!

-功能说明
1支持默认样式如果直接使用ESTabBarController进行初始化,你会得到与UITabBarController完全相同的仿系统样式

UITabBarController样式:

enter image description here

ESTabBarController仿系统样式:

enter image description here
2支持带有"More"的默认样式使用ESTabBarController进行初始化,若item大于最大显示数量则显示"More",样式与UITabBarController一致

带有"More"的UITabBarController样式:

enter image description here

带有"More"的ESTabBarController样式:

enter image description here
3支持UITabBarItem和ESTabBarItem混合可以任意设置tabbar的items,支持即包含UITabBarItem,同时也包含ESTabBarItem

ESTabBar和UITabBar混合样式:

enter image description here

带有'More'的ESTabBar和UITabBar混合样式:

enter image description here
4支持UIKit属性支持UITabBarController、UITabBar和UITabBarItem的大部分API属性,使原有代码无需任何修改即可无缝迁移到ESTabBarController

支持UITabBarController的selectedIndex属性的实现:

enter image description here
5支持与UINavigationController任意嵌套通常在使用UITabBarController过程中,会存在两种比较常见的层级处理方式:

第一种:

├── UITabBarController

└──── UINavigationController

└────── UIViewController

└──────── SubviewControllers

第二种:

├── UINavigationController

└──── UITabBarController

└────── UIViewController

└──────── SubviewControllers

第一种情况在push子视图的时候需要设置 hidesBottomBarWhenPushed = true , 第二种则不需要。

在ESTabBarController中,通过添加Container视图到UITabBar的方式来兼容这两种层级处理方式。
6支持自定义使用ESTabBarController可以实现:

1. 自定义选中颜色和样式

enter image description here

2. 添加选中时的动画效果

enter image description here

3. 自定义Item的背景颜色

enter image description here

4. 添加高亮时的动画效果

enter image description here

5. 添加一些动画暗示用户点击

enter image description here

6. 等等......

7支持自定义按钮大小

支持自定义点击事件
ESTabBarController支持自定义按钮的大小,你可以轻松定制不规则大小的tab按钮。

当按钮frame大于TabBar时,通过HitTest方法使其超出TabBar区域点击仍然有效。

另外,ESTabBarController能够自定义点击事件,并通过一个block回调给上层处理。

中间带有较大按钮样式:

enter image description here

带有特殊提醒框样式:

enter image description here

自定义按钮点击事件:

enter image description here
8支持默认通知样式如果直接使用ESTabBarController进行初始化,你会得到与UITabBarController完全相同的仿系统通知样式

UITabBarController样式:

enter image description here

ESTabBarController仿系统样式:

enter image description here
9支持自定义通知样式使用ESTabBarController可以实现:

1. 自定义提醒动画

enter image description here

enter image description here

2. 自定义提醒样式

enter image description here

3. 等等......

10支持Lottie通过自定义ContentView,能够添加Lottie的LAAnimationView到Item

enter image description here

支持环境

  • Xcode 8 or later
  • iOS 8.0 or later
  • ARC
  • Swift 3 or later

Demo

下载后运行ESTabBarControllerExample工程,你可以看到一些使用ESTabBarController实现的自定义TabBar的更多例子。

如何安装

CocoaPods

pod "ESTabBarController-swift"

Carthage

github "eggswift/ESTabBarController"

手动安装

git clone https://github.com/eggswift/ESTabBarController.git
open ESTabBarController

未完成的事

  1. Containers的布局方式目前是纯代码布局,使用Autolayout应该会更好。
  2. 当存在"More"时,若进行Edit会出现问题。
  3. UITabBarItem的部分属性还没有桥接到ESTabBarItem。
  4. ESTabBarItemMoreContentView中的"More"图片目前还未设置到framework中,计划将它转化为创建CGBitmap的代码。

感谢:

  • animated-tab-bar by http://ramotion.com
  • Example中部分图片资源来自 http://www.iconfont.cn

关于

ESTabBarController是由lihao开发和维护。如果你在使用过程中遇到什么疑问或任何问题,欢迎提交 issue 随时交流。
如果你想为ESTabBarController输出代码,请提交 Pull Request,我会尽可能快的去处理。

相关文章:

iPhone App开发导航条(Navigation Bar)素材PSD下载

不管是iPhone还是Android的应用App界面基本上最上方都会有个导航条(Navigation Bar)。于是我决定创建此页面整理收集所有好看的适合在iPhone App应用开发中使用的导航条素材PSD文件,并附有下载链接供需要在自己的iPhone App应用开发中需要使用…

点歌服务器工作原理,KTV点歌系统方案概述

《KTV点歌系统方案概述》由会员分享,可在线阅读,更多相关《KTV点歌系统方案概述(7页珍藏版)》请在人人文库网上搜索。1、一)目前点歌系统的主流方式目前,可以实现的KTV系统的点歌方式很多,但是可以主要归类为以下两大方式&#xf…

Xcode快捷键及代码块

2017-02-16 吴白 CocoaChina手指在键盘上飞速跳跃,终端上的代码也随着飞舞,是的这确实很酷。优秀的程序员总是这么一群人,他们不拘于现状,不固步自封,他们喜欢新奇的事,他们把自己发挥到极致。 指法攻略 放下您钟爱的鼠标吧&#…

使用logrotate管理nginx日志文件

本文转载自:http://linux008.blog.51cto.com/2837805/555829 描述:linux日志文件如果不定期清理,会填满整个磁盘。这样会很危险,因此日志管理是系统管理员日常工作之一。我们可以使用"logrotate"来管理linux日志文件&am…

c 异步中断服务器连接,异步连接和断开与epoll(Linux)

我有一个“完整”的答案在这里以防别人正在寻找这样的:#include #include ........int retVal -1;socklen_t retValLen sizeof (retVal);int status connect(socketFD, ...);if (status 0){// OK -- socket is ready for IO}else if (errno EINPROGRESS){struc…

java获取真实ip

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理软…

卡片式设计的最佳实践分享

2017-02-17 三达不留点gpj CocoaChina卡片本质上是一个简单的信息容器,信息量有限,但设计干净整洁。现如今,在保证界面具有优秀可用性的同时,卡片式的设计甚至成为了平衡界面美学的默认做法。作为最初由Pinterest和Facebook这样的…

Arduino 各种模块篇 光敏感应器 简易光敏

这一款是非常简单的光敏感应器 简单到,只对一定光强度有信号感应,输出TTL电平。 此款也是用电位器来调节的。 都是这么简单。 过段时间我为大家奉上数字版的光敏传感器。 ————————————————————————分割线———————————…

vb打开服务器excel文件路径,咨询下VB如何打开EXCEL文件并将内容显示在listbox中

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Adodc DataGrid 控件直接连接 Excel 表格, 把 Excel 表格当成数据库。 在窗体中画出 Adodc1 和 DataGrid1 两个控件, 不做任何属性设置,只管大小和位置。 ------------------------------…

iOS动画进阶 - 手摸手教你写ShineButton动画

移动端访问不佳,请访问我的个人博客 前段时间在github上看见一个非常nice的动画效果,可惜是安卓的,想着用Swift写一个iOS版的,下下来源代码研究了一下,下面是我写代码的心路历程 先上图和demo的地址 分析动画过程 刚开…

redis自动过期

我当时设置如登陆自动过期的时间。自己找的做了下。 设置自动过期时间。 public static PooledRedisClientManager poolreds; static RedisPool() { try { poolreds new PooledRedisClientManager(10, new string[] { “101210.212.:1213” }); } catch (Exception…

Java中使用LUA脚本语言

Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。简单介绍可详…

电脑显示服务器地址无法ping通,网关无法Ping通故障及解决方法

很多网络故障是常见问题,一般的三板斧方法就能解决问题,但有些故障容易让我们多走弯路,我们不妨拓宽故障排查范围,换换思路。在与网络亲密接触的过程中,我们或多或少地会遇到一些网络故障,对于许多网络故障…

VVeboTableView 源码解析

原文链接:http://www.jianshu.com/p/78027a3a2c41最近在看一些 iOS 性能优化的文章,我找到了 VVeboTableView 这个框架。严格来说这个不属于框架,而是作者用自己的方式优化 UITableView 的一个实践。 VVeboTableView 展示了各种类型的 cell&a…

人工智能第二次作业

2.9设有如下语句,请用相应的谓词公式分别把他们表示出来 (1) 有的人喜欢梅花,有的人喜欢菊花,有的人既喜欢梅花又喜欢菊花 。 解: P(x):x是人 L(x,y):x喜欢y 其中,y的个体域是{梅花,…

Perl 校验命中的脚本

这个脚本无比的重要,虽然代码简单,但是在判断是否准确上,有着很重要的地位。 通过icmp和解析,它有一定意义所在。 mark!.. #!/usr/bin/perl use Net::Ping; sub icmp_domain{$ktrue;local($host)shift;$pNet::Ping->new("…

从基于网络的安装服务器安装操作系统,PXE 概述 - Sun Fire X4800 服务器安装指南(适用于 Linux 操作系统)...

PXE 概述使用 Linux 预引导执行环境 (preboot execution environment, PXE) 可从网络接口而不是本地存储引导服务器。对于 OS 安装,从基于 PXE 的OS 分发映像引导目标服务器就像从 DVD 引导一样,不同之处在于介质位于网络中。要使用 PXE,您需…

下载最新Android代码的方法

之前我是去Android官方网站下载最新Android代码,但是这种方法需要翻墙,而且有时候翻墙又不太方便,今天我发现一个不错的网站,是清华大学搞的,跟Android官方的代码基本保持同步,而且下载方法跟Android官方的…

socket编程缓冲区大小对send()的影响

1. 概述 Socket编程中,使用send()传送数据时,返回结果受到以下几个因素的影响: • Blocking模式或non-blocking模式 • 发送缓冲区的大小 • 接收窗口大小 本文档介绍通过实验的方式,得出(收发)缓冲区大…

不用任何第三方,写一个RTMP直播推流器

2016年是移动直播爆发年,不到半年的时间内无数移动直播App掀起了全民直播的热潮。然而个人觉得直播的门槛相对较高,从推流端到服务端器到播放端,无不需要专业的技术来支撑,仅仅推流端就有不少需要学习的知识。目前大部分直播采用的都是RTMP协…

手机连接服务器数据库文件,手机连接服务器数据库文件夹

手机连接服务器数据库文件夹 内容精选换一换GaussDB(DWS)支持使用gs_dump工具导出某个数据库级的内容,包含数据库的数据和所有对象定义。可根据需要自定义导出如下信息:导出数据库全量信息,包含数据和所有对象定义。使用导出的全量信息可以创…

开源一个上架 App Store 的相机 App

原创 2017-02-21 伯乐专栏/陈浩 iOS大全(点击上方公众号,可快速关注) 来源:伯乐在线 - Hawk0620 如有好文章投稿,请点击 → 这里了解详情 如需转载,发送「转载」二字查看说明 Osho 相机是我独立开发上架的…

WIN7下,联想A30T通过USB连接上网

1.手机连接3G信号 2.手机上在设置里 "设置" |"应用程序" |"USB模式" |勾选"网卡模式" 3.连接上Win7,会出现驱动安装程序,手动安装这里的驱动.(驱动在百度网盘:) 4.在设备管理,网络适配器里查看驱动是否安装成…

在bootstrap ace样式框架上修改的后台管理型模板(Tab页后台管理模板)

后台管理模板开始用frameset布局,但是有时候会遮挡比如上面导航或者左边导航的二级三级弹出菜单,因为宽度被限制了,所以有时候就用easyui或者ext的,但是样式不好看,然后看到了bootstrap ace的后台管理模板,…

文件服务器的内存要多少,文件服务器内存要多大

文件服务器内存要多大 内容精选换一换Windows场景中,当把源端服务器迁移到华为云后,目的端服务器C盘的已用空间比对应源端服务器C盘的已用空间大至少1GB,而不是与源端服务器C盘的已用空间一致,这正常吗?正常现象。您可…

好玩的 RAC

UIControl 监听 control 点击 从此告别 addTarget 和 btnClick 1234[[self.loginBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(UIButton *btn) {// btn, 即 self.loginBtn// 这里执行点击之后的操作}];UITextField 监听 textField 的 text 改…

机器学习简单代码示例

机器学习简单代码示例 //在gcc-4.7.2下编译通过。 //命令行&#xff1a;g -Wall -ansi -O2 test.cpp -o test #include <iostream> using namespace std; void input(int &oper,const bool meth) {//meth为true则只判断1&#xff0c;为false则判断1或0while(true){ci…

【2007-5】【素数算式】

Description 在下面的算式中每个“#”都表示一个素数数字。##* #————###请编写程序确定这些数字&#xff0c;输出所有的解。Input Output 依次打印输出每一种解&#xff0c;每行表示一种解&#xff0c;格式为&#xff1a;##*# ###。Sample Input Sample Output HINT Sou…

ubuntu服务器版编辑文件,Ubuntu 服务器版 18.04.4 固定 IP 设置

1、输入命令 su 以root用户权限操作2、找到Ubuntu网络配置文件vim /etc/netplan/50-cloud-init.yaml3、输入 i 让文件变成可编辑状态4、修改内容dhcp4: nodhcp4: noaddresses: [192.168.3.50/24]gateway4: 192.168.3.1nameservers:addresses: [8.8.8.8, 8.8.4.4]如图&#xff…

RACCommand 粗解

前言 学习 RAC 的过程中&#xff0c;RACCommand 是我一直很迷惑的点&#xff0c;感觉一直抓不到它的要点&#xff0c;不明白为何要这样使用。曾经想过用别的方法来替代&#xff0c;只要能找到替代的方法&#xff0c;暂时就没必要死磕&#xff0c;结果发现避免不了&#xff0c;那…