如何使用Swift在iOS中从右到左显示视图控制器

问题描述 投票:74回答:12

我正在使用presentViewController呈现新屏幕

let dashboardWorkout = DashboardWorkoutViewController()
presentViewController(dashboardWorkout, animated: true, completion: nil)

这将显示从下到上的新屏幕,但是我希望它不使用UINavigationController就从右到左显示。

我使用的是Xib而不是情节提要,我该怎么做?

ios swift swift2 segue
12个回答
147
投票

您使用的是xib还是storyboard都没有关系。通常,将视图控制器推入演示者的UINavigiationController时会使用从右向左的过渡。

UPDATE

添加了计时功能kCAMediaTimingFunctionEaseInEaseOut

Sample project,将Swift 4

实现添加到GitHub

Swift 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参数,在这种情况下,自定义过渡并不重要。它可以是任何值,truefalse


0
投票
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)

-1
投票

如果您想保留Apple的经典动画,而又没有看到使用CATransition()看到的“黑色”过渡,我有一个更好的解决方案对我有用。只需使用popToViewController方法。


-4
投票

这对我有用:


59
投票

用于完成/关闭的完整代码,Swift 3


34
投票

阅读所有答案,看不到正确的解决方案。正确的方法是为呈现的VC委托创建自定义UIViewControllerAnimatedTransitioning。


14
投票

您也可以使用自定义序列。


7
投票

尝试一下,


4
投票

如果您确实想使用“快速修复” CATransition方法...。


2
投票

导入UIKit并为UIViewController创建一个扩展:


1
投票

尝试一下。


0
投票

使用Swift在iOS中从右到左显示视图控制器

© www.soinside.com 2019 - 2024. All rights reserved.