如何使用动画以编程方式更改标签栏?

How to change tab bar programmatically with animation?

我正在尝试使用动画以编程方式更改我的应用程序中的选项卡栏。

在我的标签栏委托 class 中,我目前有这个,我从 获得的。

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {

    guard let fromView = selectedViewController?.view, let toView = viewController.view else {
        return false
    }

    UIView.transition(from: fromView, to: toView, duration: 0.3, options: [.transitionCrossDissolve], completion: nil)

    return true
}

当用户点击时,上面的动画标签栏会发生变化,但当标签栏以编程方式更改时不起作用,就像在这种情况下:

// code in another class
self.tabBarController?.selectedIndex = 2 // does not animate

我读过提出类似问题的 this thread,但它是在 objective-c 中写的并且是 4 年前写的。

是否有任何方法可以使编程标签栏更改动画化?

作为解决方法,您可以手动触发动画。我不知道是否推荐它,但它对我有用。

    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        animateTabBarChange(tabBarController: tabBarController, to: viewController)
        return true
    }

    func animateTabBarChange(tabBarController: UITabBarController, to viewController: UIViewController) {
        let fromView: UIView = tabBarController.selectedViewController!.view
        let toView: UIView = viewController.view

        // do whatever animation you like

    }

然后你这样称呼它:

let index = 2
animateTabBarChange(tabBarController: self.tabBarController!, to: self.tabBarController!.viewControllers![index])
self.tabBarController?.selectedIndex = index