1. 程式人生 > >Swift中設定自定義tabBar按鈕的動畫效果

Swift中設定自定義tabBar按鈕的動畫效果

將此段程式碼放到自定義的UITabBarController指令碼中即可

 //----------------------------------------------------
    // 當點選tabBar的時候,自動執行該代理方法(不需要手動設定代理)
    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        // 使用列舉遍歷,判斷選中的tabBarItem等於陣列中的第幾個
        for (k,v) in (tabBar.items?.enumerated())! {
            if v == item {
                // 列印選中的iteme下標
                print(k)
                // 將下標傳入動畫方法
                animationWithIndex(index: k)
            }
        }
    }
    //----------------------------------------------------
    // 動畫方法
    func animationWithIndex(index:Int){
        // 不知為何,無法設定陣列型別為UITabBarButton??????所以設定成了Any
        var tabbarbuttonArray:[Any] = [Any]()
        
        for tabBarBtn in self.tabBar.subviews {
            if tabBarBtn.isKind(of: NSClassFromString("UITabBarButton")!) {
                tabbarbuttonArray.append(tabBarBtn)
            }
        }
        //----------------------------------------------------
        let pulse = CABasicAnimation(keyPath: "transform.scale")
        pulse.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseInEaseOut)
        pulse.duration = 0.08
        pulse.repeatCount = 1
        pulse.autoreverses = true
        pulse.fromValue = 0.7
        pulse.toValue = 1.3
        
        // 給tabBarButton新增動畫效果
        let tabBarLayer = (tabbarbuttonArray[index] as AnyObject).layer
        tabBarLayer?.add(pulse, forKey: nil)

    }
    //----------------------------------------------------