“`html
簡要
在每個 iOS 應用程式中,TabBar 和 NavigationBar 是最基本的組件,外送平台的底層架構也不例外。這兩個 Bar 可以根據需求顯示或隱藏。為了避免在 AppDelegate 中的程式碼過於雜亂,我們將其分為更細的結構:TabBarController、TabBar 和 NavigationController,然後再由 AppDelegate 進行呼叫。這樣的組織結構會更清晰。
環境設定
首先,請建立 TabBarController、TabBar 和 NavigationController 三個類別,您可以自由命名。

AppDelegate 設定
在 AppDelegate 中,宣告剛剛建立好的 TabBarController,並將其設置為 rootViewController。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let tabBarController = JGTabBarController()
self.window?.rootViewController = tabBarController
return true
}
設置 UITabBar
在設定 UITabBar 的 backgroundColor 時,若直接使用 self.backgroundColor,顏色可能會與預期不同。相對地,使用 self.backgroundImage 設置顏色會更為準確。
使用 self.backgroundColor
self.backgroundColor = UIColor(displayP3Red: 0.1, green: 0.4, blue: 0.9, alpha: 0.8)
呈現圖

使用 self.backgroundImage
let transparentBlackColor = UIColor(displayP3Red: 0.1, green: 0.4, blue: 0.9, alpha: 0.8)
let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
transparentBlackColor.setFill()
UIRectFill(rect)
if let image = UIGraphicsGetImageFromCurrentImageContext() {
self.backgroundImage = image
}
UIGraphicsEndImageContext()
呈現圖

在使用
self.backgroundColor時,可能會出現一層透明的白色覆蓋,這可能需要調整其他變數或隱藏某些物件。這個問題可以在未來進一步處理。
UITabBar 進階功能
如果希望讓 TabBar 更具互動性,可以在 UITabBar 的 layoutSubviews 方法中添加特效或其他 點擊事件 的處理。例如,可以讓 Button 在點擊時輕微跳動,增強用戶互動體驗。
layoutSubviews
控制每個 Button 的點擊事件。
override func layoutSubviews() {
super.layoutSubviews()
var tabBarBtnIndex = 0
for subView in self.subviews {
if let navButtonClass = NSClassFromString("UITabBarButton") {
if subView.isKind(of: navButtonClass) {
tabBarBtnIndex += 1
print(tabBarBtnIndex)
let tabBarBtn = subView as? UIControl
tabBarBtn!.addTarget(self, action: #selector(buttonClicked(tabBarButton:)), for: .touchUpInside)
}
}
}
}
buttonClicked
當用戶點擊 Button 時,觸發 touchUpInside 事件,所觸發的 Button 將在指定的 duration 時間內實現放大縮小特效,該特效由 animation.values 控制。
@IBAction func buttonClicked(tabBarButton: UIControl) {
for imageView in tabBarButton.subviews {
if let navButtonClass = NSClassFromString("UITabBarSwappableImageView") {
if imageView.isKind(of: navButtonClass) {
let animation = CAKeyframeAnimation(keyPath: "transform.scale")
animation.values = [1.0, 1.15, 1.0]
animation.duration = 0.2
animation.calculationMode = .cubic
imageView.layer.add(animation, forKey: nil)
}
}
}
}
Demo

Q&A(常見問題解答)
1. 如何在 TabBar 中添加自定義按鈕?
您可以在 layoutSubviews 方法中自定義添加按鈕,並為其設置目標行為。
2. 如何處理 TabBar 的點擊事件?
使用 addTarget(_:action:for:) 方法為每個 TabBar Button 設置觸發事件。
3. 如何調整 TabBar 的外觀?
可以通過修改 backgroundColor 和 backgroundImage 來改變 TabBar 的外觀,並使用自定義的圖像來提升視覺效果。
“`
—
