我正在使用presentViewController呈现新屏幕
let dashboardWorkout = DashboardWorkoutViewController()
presentViewController(dashboardWorkout, animated: true, completion: nil)
这将显示从下到上的新屏幕,但是我希望它不使用UINavigationController
就从右到左显示。
我使用的是Xib而不是情节提要,我该怎么做?
您使用的是xib
还是storyboard
都没有关系。通常,将视图控制器推入演示者的UINavigiationController
时会使用从右向左的过渡。
UPDATE
添加了计时功能kCAMediaTimingFunctionEaseInEaseOut
Sample project,将Swift 4
实现添加到GitHubSwift 3和4.2
let transition = CATransition() transition.duration = 0.5 transition.type = CATransitionType.push transition.subtype = CATransitionSubtype.fromRight transition.timingFunction = CAMediaTimingFunction(name:CAMediaTimingFunctionName.easeInEaseOut) view.window!.layer.add(transition, forKey: kCATransition) present(dashboardWorkout, animated: false, completion: nil)
ObjC
CATransition *transition = [[CATransition alloc] init]; transition.duration = 0.5; transition.type = kCATransitionPush; transition.subtype = kCATransitionFromRight; [transition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; [self.view.window.layer addAnimation:transition forKey:kCATransition]; [self presentViewController:dashboardWorkout animated:false completion:nil];
Swift 2.x
let transition = CATransition() transition.duration = 0.5 transition.type = kCATransitionPush transition.subtype = kCATransitionFromRight transition.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseInEaseOut) view.window!.layer.addAnimation(transition, forKey: kCATransition) presentViewController(dashboardWorkout, animated: false, completion: nil)
似乎类似于
animated
方法中的presentViewController
参数,在这种情况下,自定义过渡并不重要。它可以是任何值,true
或false
。
let transition = CATransition()
transition.duration = 0.25
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromLeft
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
tabBarController?.view.layer.add(transition, forKey: kCATransition)
self.navigationController?.popToRootViewController(animated: true)
如果您想保留Apple的经典动画,而又没有看到使用CATransition()看到的“黑色”过渡,我有一个更好的解决方案对我有用。只需使用popToViewController方法。
这对我有用:
用于完成/关闭的完整代码,Swift 3
阅读所有答案,看不到正确的解决方案。正确的方法是为呈现的VC委托创建自定义UIViewControllerAnimatedTransitioning。
您也可以使用自定义序列。
尝试一下,
导入UIKit并为UIViewController创建一个扩展:
尝试一下。
使用Swift在iOS中从右到左显示视图控制器