제스처 인식기 설정 및 대화식 전환과 같은 상용구에 대해서는 this answer을 참조하십시오.UIView.animate가 대화 형 컨트롤러 전환과 함께 작동하지만 UIViewPropertyAnimator가 작동하지 않는 이유는 무엇입니까?
대화 형 전환을 실험하고 있으며 제스처에 따라 컨트롤러가 정상적으로 전환되는 대신 왜 컨트롤러가 전환되는지 알아 내려고 꽤 많은 시간을 보냈습니다. 나는 UIViewPropertyAnimator
을 사용하고 있기 때문에 그것이 작동하지 않는다는 것을 발견했습니다. 이전 UIView 애니메이션 블록으로 전환하면 바로 사용할 수 있습니다. 왜? 구현의 차이점은 무엇입니까? 아이폰 OS UIViewControllerAnimatedTransitioning
프로토콜이 업데이트되었다 (10)의 UIViewPropertyAnimator
의 도입
func animateTransition(using transitionContext: UIViewControllerContextTransitioning)
{
// Ignore the forced unwrapping, for sake of brevity.
let view_From = transitionContext.viewController(forKey: .from)!.view!
let view_To = transitionContext.viewController(forKey: .to)!.view!
transitionContext.containerView.insertSubview(view_To, aboveSubview: view_From)
view_To.alpha = 0
// This animation block works - it will follow the progress value of the interaction controller
UIView.animate(withDuration: 1, animations: {
view_From.alpha = 0.0
view_To.alpha = 1.0
}, completion: { finished in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
})
// This animation block fails - it will play out normally and not be interactive
/*
let animator = UIViewPropertyAnimator(duration: 1, curve: .linear)
animator.addAnimations {
view_To.alpha = 1
view_From.alpha = 0
}
animator.addCompletion { (position) in
switch position {
case .end: print("Completion handler called at end of animation")
case .current: print("Completion handler called mid-way through animation")
case .start: print("Completion handler called at start of animation")
}
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
}
animator.startAnimation()
*/
}