swift – ViewController幻灯片动画
发布时间:2020-12-14 02:28:24 所属栏目:百科 来源:网络整理
导读:我想在tabswitch [1]创建一个类似iOS app facebook的动画.我已经尝试开发某种动画,出现的问题是旧的视图控制器直接在交换机上变得不可见,而不是在新控制器快速滑动时缓慢淡出. 我发现这个问题How to animate Tab bar tab switch with a CrossDissolve slide
我想在tabswitch [1]创建一个类似iOS app facebook的动画.我已经尝试开发某种动画,出现的问题是旧的视图控制器直接在交换机上变得不可见,而不是在新控制器快速滑动时缓慢淡出.
我发现这个问题How to animate Tab bar tab switch with a CrossDissolve slide transition?,但正确的标记解决方案对我来说并不适用(它不是幻灯片,它是一个淡入淡出过渡).我还想得到的是向左或向右滑动以切换标签的功能.就像在旧版本的facebook上一样. 到目前为止我得到的是: extension TabBarController: UITabBarControllerDelegate { func tabBarController(_ tabBarController: UITabBarController,shouldSelect viewController: UIViewController) -> Bool { guard let fromView = selectedViewController?.view,let toView = viewController.view else { return false } if fromView != toView { toView.transform = CGAffineTransform(translationX: -90,y: 0) UIView.animate(withDuration: 0.25,delay: 0.0,options: .curveEaseInOut,animations: { toView.transform = CGAffineTransform(translationX: 0,y: 0) }) }; return true } } class TabBarController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() delegate = self } } 如何解决这个问题? [1]
您可以使用以下想法:
https://samwize.com/2016/04/27/making-tab-bar-slide-when-selected/
此外,这里是更新到Swift 4.1的代码,我也删除了强制解包: import UIKit class MyTabBarController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() delegate = self } } extension MyTabBarController: UITabBarControllerDelegate { func tabBarController(_ tabBarController: UITabBarController,shouldSelect viewController: UIViewController) -> Bool { guard let tabViewControllers = tabBarController.viewControllers,let toIndex = tabViewControllers.index(of: viewController) else { return false } animateToTab(toIndex: toIndex) return true } func animateToTab(toIndex: Int) { guard let tabViewControllers = viewControllers,let selectedVC = selectedViewController else { return } guard let fromView = selectedVC.view,let toView = tabViewControllers[toIndex].view,let fromIndex = tabViewControllers.index(of: selectedVC),fromIndex != toIndex else { return } // Add the toView to the tab bar view fromView.superview?.addSubview(toView) // Position toView off screen (to the left/right of fromView) let screenWidth = UIScreen.main.bounds.size.width let scrollRight = toIndex > fromIndex let offset = (scrollRight ? screenWidth : -screenWidth) toView.center = CGPoint(x: fromView.center.x + offset,y: toView.center.y) // Disable interaction during animation view.isUserInteractionEnabled = false UIView.animate(withDuration: 0.3,usingSpringWithDamping: 1,initialSpringVelocity: 0,options: .curveEaSEOut,animations: { // Slide the views by -offset fromView.center = CGPoint(x: fromView.center.x - offset,y: fromView.center.y) toView.center = CGPoint(x: toView.center.x - offset,y: toView.center.y) },completion: { finished in // Remove the old view from the tabbar view. fromView.removeFromSuperview() self.selectedIndex = toIndex self.view.isUserInteractionEnabled = true }) } } 因此,您需要继承UITabBarController并且还必须编写动画部分,您可以调整动画选项(延迟,持续时间等). 我希望它有所帮助,欢呼! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |