5

我有一个低 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 中执行淡出效果。感觉人很坏 这样做的正确方法是什么?

4

0 回答 0