Ну, я бы сказал, что во-первых, они используют более быструю анимацию (более короткую продолжительность), и они происходят одновременно. Кроме того, они анимируют альфа и масштаб данных представлений.
Я бы использовал что-то вроде этого:
...
// prepare view
toView.transform = CGAffineTransform(scaleX: 0.7, y: 0.7)
toView.alpha = 0
// Animate
UIView.animate(withDuration: 0.3, delay: 0.0, options: [.curveEaseInOut],
animations: {
fromView.alpha = 0
fromView.transform = CGAffineTransform(scaleX: 0.7, y: 0.7)
toView.transform = .identity
toView.alpha = 1
}, completion: nil)
Это лучше?
РЕДАКТИРОВАТЬ:
Поскольку мы обсуждали другое решение в комментариях - чтобы получить более эффективные способы для анимации подпредставлений, вы можете напечатать приведение этих viewControllers. Не забывайте, что если вы встроили, например, UINavigationControllers, вы должны сначала набрать приведение к этому классу! Я попробовал это, и это работает:
extension MyCustomTabBarVC: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
// Presented View Controller which should fade out
if let selectedNC = selectedViewController as? UINavigationController {
if let myFirstVC = selectedNC.viewControllers.first as? MyFirstViewController {
// animate fade out
} else if let mySecondVC = selectedNC.viewControllers.first as? MySecondViewController {
// animate fade out
}
}
// View Controllers which should be selected
if let navigationController = viewController as? UINavigationController {
if let firstC = navigationController.viewControllers.first as? MyFirstViewController {
// animate fade in
} else if let firstC = navigationController.viewControllers.first as? MySecondViewController {
// animate fade in
}
}
return true
}
}
Без контроллера навигации вы можете просто напечатать приведение таких как:
...
if let myFirstVC = selectedViewController as? MyFirstViewController {
// animate fade out
}
...