Как программно изменить панель вкладок с анимацией? - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь программно изменить панель вкладок в моем приложении с помощью анимации.

В моем классе делегатов панели вкладок у меня сейчас есть это, которое я получил от этой темы .

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

Я прочитал эту ветку , которая задает аналогичный вопрос, но она написана нацель-с и 4 года назад.

Есть ли какой-нибудь метод, который мог бы анимировать программные изменения панели вкладок?

1 Ответ

0 голосов
/ 24 июня 2018

В качестве обходного пути вы можете запустить анимацию вручную.Я не знаю, рекомендуется ли это, но это работает для меня.

    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
...