EntryController.swift
3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//
// EntryController.swift
// NumberCube
//
// Created by ilCode on 2025/3/27.
//
import UIKit
//MARK: - life
class EntryController: UITabBarController {
private var curIndex: Int = 0
private lazy var tabBarItemViews = [UIView]()
override func viewDidLoad() {
super.viewDidLoad()
// 设置tabbar背景色 && 隐藏tabbar分割线
tabBar.backgroundImage = UIImage()
tabBar.shadowImage = UIImage()
tabBar.backgroundColor = .white
// 设置tabbar选中及未选中的文字颜色
tabBar.tintColor = kMasterColor
tabBar.unselectedItemTintColor = hexColor("AAAAAA")
addController(rootVC: HomeController(), title: "魔方", image: R.image.ic_cube_normal(), selectedImage: R.image.ic_cube_selected())
addController(rootVC: ParaController(), title: "参数", image: R.image.ic_para_normal(), selectedImage: R.image.ic_para_selected())
addController(rootVC: SettingController(), title: "设置", image: R.image.ic_set_normal(), selectedImage: R.image.ic_set_selected())
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// 保存tabBarItemView
for tabBarItemView in tabBar.subviews {
if tabBarItemView.isKind(of: NSClassFromString("UITabBarButton")!) {
tabBarItemViews.append(tabBarItemView)
}
}
}
}
//MARK: - UITabBarDelegate
extension EntryController {
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
guard let itemIndex = tabBar.items?.firstIndex(of: item),
itemIndex != curIndex else { return }
zoomAnimate(itemViews: tabBarItemViews, index: itemIndex)
curIndex = itemIndex
}
}
//MARK: - Private
extension EntryController {
/// 添加缩放动画
/// - Parameters:
/// - itemViews: itemViews
/// - index: index
private func zoomAnimate(itemViews: [UIView], index: Int) {
guard itemViews.count > 0 else { return }
let zoomAni = CABasicAnimation(keyPath: "transform.scale")
zoomAni.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
zoomAni.duration = 0.2;
zoomAni.repeatCount = 1;
zoomAni.autoreverses = true;
zoomAni.fromValue = 0.9
zoomAni.toValue = 1.1
itemViews[index].layer.add(zoomAni, forKey: nil)
}
/// 添加子控制器
/// - Parameters:
/// - rootVC: rootVC
/// - title: title
/// - image: image
/// - selectedImage: selectedImage
private func addController(rootVC: UIViewController, title: String, image: UIImage?, selectedImage: UIImage?) {
let navi = UINavigationController(rootVC: rootVC)
navi.tabBarItem = UITabBarItem(title: title, image: image, selectedImage: selectedImage)
navi.tabBarItem.image = navi.tabBarItem.image?.withRenderingMode(.alwaysOriginal)
navi.tabBarItem.selectedImage = navi.tabBarItem.selectedImage?.withRenderingMode(.alwaysOriginal)
addChild(navi)
}
}