如何使用动画以编程方式更改标签栏?
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
我正在尝试使用动画以编程方式更改我的应用程序中的选项卡栏。
在我的标签栏委托 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