问题描述
在我的第一个视图控制器中,我尝试在使用alpha方法制作动画后执行segue。 我在segue中指定modalTransitionStyle为.crossdissolve 但他没有这样做。他的表现就像推法一样。
这两个viewControllers在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,并且应用程序崩溃了。 这是代码:
private func presentMenuViewController() {
let menuViewController = MenuViewController()
menuViewController.personne = personne
menuViewController.modalPresentationStyle = .fullScreen
menuViewController.modalTransitionStyle = .crossdissolve
present(menuViewController,animated: true)
}
解决方法
.modalTransitionStyle
属性仅用于模式过渡。推送不是模式转换。
您将需要创建UIStoryboardSegue的自定义子类。
,我找到了问题的答案,这是代替segueVersMenuController()使用的函数代码:
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)
}