別のビュー コントローラーを提示しながら、カスタム トランジションを作成しようとしましたが、2 つの方法で成功しました。1 つは CGAfflineTransformIdentity を使用する方法で、もう 1 つは CGAffineTransformMakeTranslation を使用して ViewController をプッシュするだけです。
Apple のドキュメントでは、CGAfflineTransformIdentity を単位単位行列として説明しています。恒等行列を使用してビューを変換している間、アニメーションはどのように発生しますか?
実際の数学では、何かを単位行列で乗算すると、結果として同じ行列が得られます。
では、CGAfflineTransformIdentity では実際にどのように移行が行われるのでしょうか?
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
let container = transitionContext.containerView()
let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)!
let toView = transitionContext.viewForKey(UITransitionContextToViewKey)!
let offScreenUp = CGAffineTransformMakeTranslation(0, -container.frame.size.height )
let offScreenDown = CGAffineTransformMakeTranslation(0, 0)
toView.transform = offScreenUp
container.addSubview(fromView)
container.addSubview(toView)
let duration = self.transitionDuration(transitionContext)
UIView.animateWithDuration(duration, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0.8, options: nil, animations: {
toView.transform = CGAffineTransformIdentity
//toView.transform = offScreenDown
}, completion: { finished in
// tell our transitionContext object that we've finished animating
transitionContext.completeTransition(true)
})
}