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

简介: 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、红点


二、本地的使用



image.png


  • 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 包


image.png


  • 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 )


目录
相关文章
|
7月前
|
程序员 编译器 C++
【深入探究Qt内部架构】QObject、事件循环与Q_OBJECT宏的协同作用(一)
【深入探究Qt内部架构】QObject、事件循环与Q_OBJECT宏的协同作用
187 0
|
弹性计算 监控 安全
如何选择阿里云服务器配置?
如何选择阿里云服务器配置?阿里云服务器配置选择方法包括云服务器类型、CPU内存、操作系统、公网带宽、系统盘存储、网络带宽选择、安全配置、监控等,阿里云百科分享阿里云服务器配置选择方法,选择适合自己的云服务器配置
|
存储 弹性计算 固态存储
如何选择阿里云服务器配置?
阿里云服务器配置怎么选择?公司可以选择ECS计算型c7、通用型g6等独享型云服务器2核4G起步,个人用户选择ECS共享型s6云服务器1核2G配置,关于阿里云服务器配置的选择还是要根据实际使用场景来选择,云服务器配置包括ECS实例规格、CPU内存配置、公网带宽和系统盘,阿里云百科来详细说下企业用户和个人用户选择阿里云服务器配置的方法:
137 0
如何选择阿里云服务器配置?
|
弹性计算 CDN .NET
如何选择阿里云服务器配置
简介: 什么配置的阿里云服务器是适合自己的呢?下面我们就来说说如何选择阿里云服务器配置。
如何选择阿里云服务器配置
|
开发者 Windows
微软被传证实收购 GitHub
GitHub 是一个庞大的代码库,已经有越来越多的公司使用这个网站来共享和查看代码,其中不乏苹果、亚马逊、谷歌等大型科技公司。微软则是该网站的最大贡献者,并有超过 1000 名员工长期地将代码推送到 GitHub 上。
1190 0
|
6天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
22天前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
26天前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
17天前
|
并行计算 前端开发 物联网
全网首发!真·从0到1!万字长文带你入门Qwen2.5-Coder——介绍、体验、本地部署及简单微调
2024年11月12日,阿里云通义大模型团队正式开源通义千问代码模型全系列,包括6款Qwen2.5-Coder模型,每个规模包含Base和Instruct两个版本。其中32B尺寸的旗舰代码模型在多项基准评测中取得开源最佳成绩,成为全球最强开源代码模型,多项关键能力超越GPT-4o。Qwen2.5-Coder具备强大、多样和实用等优点,通过持续训练,结合源代码、文本代码混合数据及合成数据,显著提升了代码生成、推理和修复等核心任务的性能。此外,该模型还支持多种编程语言,并在人类偏好对齐方面表现出色。本文为周周的奇妙编程原创,阿里云社区首发,未经同意不得转载。
11671 12
|
11天前
|
人工智能 自然语言处理 前端开发
100个降噪蓝牙耳机免费领,用通义灵码从 0 开始打造一个完整APP
打开手机,录制下你完成的代码效果,发布到你的社交媒体,前 100 个@玺哥超Carry、@通义灵码的粉丝,可以免费获得一个降噪蓝牙耳机。
5210 14