我有一个低 alpha 背景的自定义全屏警报。默认的模态动画从下到上滑动。我想要淡入淡出的警报。我是 UIViewControllerTransitioningDelegate + UIViewControllerAnimatedTransitioning。在我的animateTransition(using:)
方法中,我有类似的东西:
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let containerView = transitionContext.containerView
if let toView = transitionContext.view(forKey: .to) {
toView.frame = containerView.frame
containerView.addSubview(toView)
UIView.animate(withDuration: duration, delay: 0,
usingSpringWithDamping: 0.5,
initialSpringVelocity: 0,
options: UIViewAnimationOptions.allowUserInteraction,
animations: {toView.alpha = 1})
transitionContext.completeTransition(true)
}
}
问题是淡化效果在 1-1.5 秒左右看起来不错;但是,在此过渡动画期间,用户不能点击任何按钮,例如“是”或“否”。我尝试了以下操作:
- 将调用
transitionContext.completeTransition(true)
移到动画的完成处理程序之外,以便在动画开始时立即发生 - 添加
UIViewAnimationOptions.allowUserInteraction
选项 - 正如另一篇文章中所建议的那样,从 0.1(和 1.0)开始 alpha
- 我确实注意到 UIViewControllerInteractiveTransitioning 但这似乎只允许与动画本身进行交互
我可以看到这个工作的唯一方法是,如果我在 VC 中的 viewDidAppear 中执行淡入效果,在 UIViewControllerAnimatedTransitioning 中执行淡出效果。感觉人很坏 这样做的正确方法是什么?