iOS 呈现 View Controller 动画为 'Push'(左右动画)

标签 ios swift2 xcode7 custom-transition

目前,我有一个 View Controller 呈现其他 View Controller 。我想做的是重新创建推送 View Controller 时使用的默认动画。

我目前的方法是:

FirstViewController:

@IBAction private func push(sender: AnyObject) {
    let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SecondViewController")

    let transition = CATransition()
    transition.duration = 0.5
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.type = kCATransitionPush
    transition.subtype = kCATransitionFromRight

    view.window?.layer.addAnimation(transition, forKey: kCATransition)

    presentViewController(vc, animated: false, completion: nil)
}

SecondViewController:

@IBAction private func pop(sender: AnyObject) {

    let transition = CATransition()
    transition.duration = 0.5
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.type = kCATransitionPush
    transition.subtype = kCATransitionFromLeft

    view.window?.layer.addAnimation(transition, forKey: kCATransition)

    dismissViewControllerAnimated(false, completion: nil)
}

它几乎可以工作,但是我有一个奇怪的行为,在 View Controller 之间转换时我遇到了一种黑屏/闪烁。我已经尝试更改 window.backgroundColor 但它没有解决问题。

提前致谢0_0...

最佳答案

问题只是在于您所做的不是如何自定义当前/关闭过渡的动画。苹果已经为你提供了一个清晰的、完善的、官方的方式来做到这一点,而你所做的并不是它。您需要为呈现的 View Controller 提供一个 transitioningDelegate 以及 animationControllerForPresentedController:animationControllerForDismissedController: 的实现,并实现 UIViewControllerAnimatedTransitioning 协议(protocol),可能还包括自定义 UIPresentationController 子类。

关于iOS 呈现 View Controller 动画为 'Push'(左右动画),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42401430/

相关文章:

iphone - 两个 UITableViews 一个 UIViewController 的一部分 : Each with a delegates and data sources that are different objects

objective-c - 在非空数组上获取 'index 0 beyond bounds for empty array' 错误

ios - 如何在 Swift 2 中从 JSON 填充我的 tableView?

ios - 解析 Twitter 登录错误

ios - Swift - 使用 UITableViewController 创建子菜单

ios - 如何从我的 native iOS 应用程序在 SnapChat 上共享图像?

ios - AIR 上应用程序描述 rune 件的 UISupportedInterfaceOrientations

arrays - 为什么 [SomeStruct] 不能转换为 [Any]?

Xcode 7 无法打开并显示 "Failed to load code for plug-in com.apple.dt.IDE.IDEiOSSupportCore"消息

error-handling - Swift 2中的错误处理