在swift中,如何使用.crosssolve动画执行序列?

在swift中,如何使用.crosssolve动画执行序列?,swift,animation,segue,fade,Swift,Animation,Segue,Fade,在我的第一个视图控制器中,我尝试在使用alpha方法的动画之后执行一个序列。 我在segue中指定,modalTransitionStyle是.cross溶解 但他没有这么做。他表现得像推法 这两个ViewController位于navigationController下,位于同一情节提要中,但位于两个不同的视图中 这是我的密码: import UIKit class AnimationPageDeDemarrageController: UIViewController {

在我的第一个视图控制器中,我尝试在使用alpha方法的动画之后执行一个序列。 我在segue中指定,modalTransitionStyle是.cross溶解 但他没有这么做。他表现得像推法

这两个ViewController位于navigationController下,位于同一情节提要中,但位于两个不同的视图中

这是我的密码:

import UIKit

class AnimationPageDeDemarrageController: UIViewController {
    
    var personne = PersonneController()
    
    @IBOutlet var slogan: UILabel!
    @IBOutlet var vueDuSlogan: UIView!
    @IBOutlet var vueBlancheDuSlogan: UIView!
    @IBOutlet var vueBlanche: UIView!
    @IBOutlet var logo: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.vueBlanche.alpha = 0
        self.slogan.alpha = 0
        self.vueDuSlogan.alpha = 0
        self.vueBlancheDuSlogan.alpha = 0
        navigationController?.setNavigationBarHidden(true, animated: false)
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.faireApparaitreLaPage()
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        navigationController?.setNavigationBarHidden(false, animated: true)
    }
    
    private func faireApparaitreLaPage() {
        UIView.animate(withDuration: 1, delay: 0, animations: {
            self.vueBlanche.alpha = 1.0
            self.slogan.alpha = 1
            self.vueDuSlogan.alpha = 1
            self.vueBlancheDuSlogan.alpha = 1
        }, completion: {
            done in
            if done {
                self.segueVersMenuController()
            }
        })
    }
    
    // segue vers MenuController
    private func segueVersMenuController() {
        //Segue vers la page menuViewController
          let menuViewController = storyboard?.instantiateViewController(identifier: "MenuViewController") as? MenuViewController
        menuViewController?.modalTransitionStyle = .crossDissolve
        menuViewController?.modalPresentationStyle = .fullScreen
            menuViewController?.personne = personne

         self.navigationController?.pushViewController(menuViewController!, animated: true)
    }

}
我已经尝试了另一种类型的segue,应用程序craches。 代码如下:

    private func presentMenuViewController() {
        let menuViewController = MenuViewController()
        menuViewController.personne = personne
        menuViewController.modalPresentationStyle = .fullScreen
        menuViewController.modalTransitionStyle = .crossDissolve
        present(menuViewController, animated: true)
    }

.modalTransitionStyle
属性仅适用于模态转换。推送不是模态转换


您需要创建UIStoryboardSegue的自定义子类。

我找到了问题的答案,下面是要使用的函数代码,而不是segueVersMenuController():


将视图控制器命名为“versMenuViewControllerSegue”非常令人困惑。它不是一个segue,它是一个视图控制器。你应该去掉变量名中的“Segue”部分。@duncac好的,我会重命名它,但为什么我的第二个解决方案会使应用程序崩溃?使用“let menuViewController=menuViewController()”这样的代码创建视图控制器几乎总是错误的。创建视图控制器而不加载其任何视图。您应该使用第一个版本中的UIStoryboard
InstanceEviewController(标识符:)
调用在第二个解决方案中创建视图控制器。我没有自定义推送序列的示例。不过,您应该能够在线找到示例代码。
private func fadeTransition() {
        let transition: CATransition = CATransition()
        transition.duration = 1.75
        transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut)
        transition.type = CATransitionType.fade
        self.navigationController!.view.layer.add(transition, forKey: nil)

        let menuViewController = self.storyboard?.instantiateViewController(withIdentifier: "MenuViewController") as! MenuViewController
        menuViewController.personne = self.personne
        self.navigationController?.pushViewController(menuViewController, animated: false)
    }