0

現在、他の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...

4

1 に答える 1

1

問題は、あなたがやっていることは、プレゼンス/ディスミス遷移のアニメーションをカスタマイズする方法ではないということだけです. Apple は、それを行うための明確で確立された公式の方法を提供しましたが、あなたがしていることはそうではありません。提示されたビュー コントローラに と の実装とともに を与え、UIViewControllerAnimatedTransitioning プロトコルを実装する必要があります。transitioningDelegateカスタムUIPresentationController サブクラスと一緒に実装することもできます。animationControllerForPresentedController:animationControllerForDismissedController:

于 2016-02-24T19:10:28.747 に答える