JKSwiftTabBarController:支持本地和服务器配置

JKSwiftTabBarController

  • 支持本地和服务器配置,支持如下功能
    • 目前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 )
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • 目前有很多APP都有着节假日换肤的功能,不同的人有这不同的实现思路,下面简单的概述一下本人的实现方式。 1、确定好...
    captianWei阅读 1,520评论 0 0
  • 本文讲述django 详细的部署教程,本机选择的是ubuntu系统,相对于比较简单,也比较详细,我也是新手,希望大...
    爽爽ing阅读 2,481评论 0 0
  • 搭建项目框架 1.创建一个根视图 (window)2 根视图上添加根控制器 tabbarController3...
    DavidFeng_swift阅读 315评论 0 1
  • 工作了两年多,一直有个“坏习惯”,就是将工作中遇到的一些问题、技巧或心得记在印象笔记里面,按理来说,作为一个...
    F森阅读 1,932评论 3 26
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,395评论 16 21