- 支持本地和服务器配置,支持如下功能
- 目前JKSwiftTabBarController最多支持 5 个 item
- 支持本地的 静态图和动态图(帧图)
- 支持修改 TabbarView的背景色以及顶部横线的颜色
- 支持角标
- 支持红点
- 支持切换item
- 支持修改item底部的文字
- 支持修改item底部的图片
- 支持动态移除 item 和 添加 item
- 总体的内容如下:
- 1、基本结构的介绍
- 2、本地的使用
- 3、服务器下载到沙盒后再使用
- 4、其他的功能
一、基本结构的介绍
- 1.1、JKTabBarController
继承于UITabBarController
,在外界使用 JKTabBarController的时候需要先继承于它 - 1.2、JKTabBarView
底部的tabbar布局 - 1.3、JKTabBarItem
底部 tabbarView 上面的每一个 item
tabBarItem图片的推荐尺寸和最大支持尺寸
标签栏(UITabBar)中tab按钮图标分别在1x、2x、3x下不会压缩变形的尺寸:
@1x : 推荐 25 x 25 (最大: 48 x 32) @2x : 推荐 50 x 50 (最大: 96 x 64) @3x : 推荐 75 x 75 (最大: 144 x 96)
- 1.4、角标
- 1.5、红点
二、本地的使用
- 2.1、静态图
let vc1 = HomeViewController() let vc2 = TradeViewController() let vc3 = ProfileViewController() viewControllers = [vc1, vc2, vc3] let titleColor = UIColor(hexString: "#444444")! let selectedColor = UIColor(hexString: "#5F00B4")! // 测试读取本地图片 let tabBarItemOne = JKTabBarItem(title: "行情", titleColor: titleColor, selectedTitleColor: selectedColor, defaultImageName: "tabbar_quotation") let tabBarItemTwo = JKTabBarItem(title: "交易", titleColor: titleColor, selectedTitleColor: selectedColor, defaultImageName: "tabbar_trade") let tabBarItemThree = JKTabBarItem(title: "我的", titleColor: titleColor, selectedTitleColor: selectedColor, defaultImageName: "tabbar_profile") tabBarView.barButtonItems = [tabBarItemOne, tabBarItemTwo, tabBarItemThree] // 默认选择第几个 tabBarView.tabBarItem = tabBarItemTwo
- 2.2、动态图
let vc1 = HomeViewController() let vc2 = TradeViewController() let vc3 = ProfileViewController() viewControllers = [vc1, vc2, vc3] let titleColor = UIColor(hexString: "#444444")! let selectedColor = UIColor(hexString: "#5F00B4")! // 测试读取本地图片 let tabBarItemOne = JKTabBarItem(localImageCount: 5, duration: 0.5, title: "行情", titleColor: titleColor, selectedTitleColor: selectedColor, defaultImageName: "tabbar_quotation") let tabBarItemTwo = JKTabBarItem(localImageCount: 5, duration: 0.5, title: "交易", titleColor: titleColor, selectedTitleColor: selectedColor, defaultImageName: "tabbar_trade") let tabBarItemThree = JKTabBarItem(localImageCount: 5, duration: 0.5, title: "我的", titleColor: titleColor, selectedTitleColor: selectedColor, defaultImageName: "tabbar_profile") tabBarView.barButtonItems = [tabBarItemOne, tabBarItemTwo, tabBarItemThree] tabBarView.tabBarItem = tabBarItemTwo
三、服务器下载到沙盒后再使用
- 3.1、服务器这块我是先把 zip包下载到 沙盒中的 Documents 文件夹下,然后再加使用 ZipArchive 解压 Zip 包
- 3.2、解压zip包代码
let zip = ZipArchive() // zip包的名字 let foldName = "JKTabbarInfo" // 下载后的zip路径 let zipPath = FileManager.jk.DocumnetsDirectory() + "/\(foldName).zip" // 防止下载文件名重复 let extName = String(Date().timeIntervalSince1970) // 检查是否可解压 if zip.unzipOpenFile(zipPath) { // 解压后的路径 let unzipPath = zipPath + extName // 解压 if zip.unzipFile(to: unzipPath, overWrite: true) { // 移除原先下载的zip文件路径 FileManager.jk.removefile(filePath: zipPath) // 移动解压后的文件到Documnets路径下 FileManager.jk.moveFile(type: .directory, fromeFilePath: unzipPath + "/\(foldName)", toFilePath: FileManager.jk.DocumnetsDirectory() + "/\(foldName)") // 删除临时解压的路径 FileManager.jk.removefile(filePath: unzipPath) } }
- 3.3、读取 解压后的文件夹
- 有几个说明,上述的 JKTabbarInfo里面的内容是我自己设计,大家可以自己任意设计,然后加载,代码中我会把 JKTabbarInfo 包放进去,大家可以自己压缩后放到
Documents
下解压 - 读取实例
// 解压后的文件夹路径 let basePath = FileManager.jk.DocumnetsDirectory() + "/JKTabbarInfo" let tabBarConfigPath = basePath + "/TabBarConfig.plist" guard let dictionary = NSDictionary(contentsOfFile: tabBarConfigPath), let titleColorString = dictionary.object(forKey: "titleColor") as? String, let selectedColorString = dictionary.object(forKey: "selectedColor") as? String, let names = dictionary.object(forKey: "titles") as? Array<String>, names.count > 0, let tabbars = dictionary.object(forKey: "Tabbars") as? Array<Dictionary<String,String>> else { // 本地沙盒没有就去加载本地的 localTabbar() return } // names: tabbar的titles数组 // 未选中的颜色 let titleColor = UIColor(hexString: titleColorString)! // 选中的颜色 let selectedColor = UIColor(hexString: selectedColorString)! var vcs: [UIViewController] = [] var barButtonItems: [JKTabBarItem] = [] for dic in tabbars { if let name = dic["title"], let defaultImageName = dic["defaultImageName"], let vcName = dic["ClassName"], let vc = vcName.jk.toViewController() { let tabBarItem = JKTabBarItem(fliePath: "\(basePath)/\(name)", title: name, titleColor: titleColor, selectedTitleColor: selectedColor, defaultImageName: defaultImageName) barButtonItems.append(tabBarItem) vcs.append(JKNavigationController(rootViewController: vc)) } } viewControllers = vcs tabBarView.barButtonItems = barButtonItems tabBarView.tabBarItem = barButtonItems[0]
四、其他的功能
let JK = UIApplication.shared.delegate as! AppDelegate
- 4.1、更改TabBarView背景色
- 设置背景图片
let barView = JK.mainViewController.tabBarView barView.setBackgroundImage(image: UIImage.jk.image(color: UIColor.red)!)
- 设置渐变背景色
let barView = JK.mainViewController.tabBarView barView.setBackgroundColors(gradientColors: [UIColor.white.cgColor, UIColor.red.cgColor, UIColor.green.cgColor])
- 4.2、设置角标,超过999就显示 999+
JK.mainViewController.showBadgeNumber(btn.isSelected ? 2000 : 0, index: 0) JK.mainViewController.showBadgeNumber(btn.isSelected ? 2000 : 0, index: 2)
- 4.3、设置某个 item 变为选中
JK.mainViewController.setSelectedItem(at: 2)
- 4.4、改变某个 item 的图标
let imageName = "tabbar_reload" JK.mainViewController.setUpItemImage(imageName, index: 0)
- 4.5、改变某个 item 的标题
let str = "回到顶部" JK.mainViewController.setUpItemTitle(str, index: 0)
- 4.6、设置某个 item 的红点
JK.mainViewController.setRedPoint(at: 0, isShow: true )