Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用自定义动画控制器关闭时,屏幕闪烁黑色_Ios_Uiviewcontroller - Fatal编程技术网

Ios 使用自定义动画控制器关闭时,屏幕闪烁黑色

Ios 使用自定义动画控制器关闭时,屏幕闪烁黑色,ios,uiviewcontroller,Ios,Uiviewcontroller,我已经编写了一个自定义动画控制器来设置视图控制器转换的动画。代码如下: class PopupAnimationController: NSObject, UIViewControllerAnimatedTransitioning { var backgroundColorView: UIView! let duration: TimeInterval = 0.35 var dismiss = false func transitionDuration(usi

我已经编写了一个自定义动画控制器来设置视图控制器转换的动画。代码如下:

class PopupAnimationController: NSObject, UIViewControllerAnimatedTransitioning {

    var backgroundColorView: UIView!
    let duration: TimeInterval = 0.35
    var dismiss = false

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return duration
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        if !dismiss {
            animatePresentTransition(using: transitionContext)
        } else {
            animateDismissTransition(using: transitionContext)
        }
    }

    func animatePresentTransition(using transitionContext: UIViewControllerContextTransitioning) {

        guard let fromVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from),
            let toVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) else {
                return
        }
        let containerView = transitionContext.containerView
        let finalFrameForVC = transitionContext.finalFrame(for: toVC) // What is this about?
        let bounds = UIScreen.main.bounds
        let snapshotView = fromVC.view.snapshotView(afterScreenUpdates: false)
        snapshotView?.frame = bounds
        backgroundColorView = UIView(frame: bounds)
        backgroundColorView.backgroundColor = UIColor.black.withAlphaComponent(0)
        // Put the window at the bottom of the screen
        toVC.view.frame = finalFrameForVC.offsetBy(dx: 0, dy: bounds.size.height)

        // Layer out the views
        containerView.addSubview(snapshotView!)
        containerView.addSubview(backgroundColorView)
        containerView.addSubview(toVC.view)

        // The animation happens here
        UIView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations: {
            self.backgroundColorView.backgroundColor = UIColor.black.withAlphaComponent(0.4)
            toVC.view.frame = finalFrameForVC
        }, completion: {
            finished in
            transitionContext.completeTransition(true)
        })

    }

    func animateDismissTransition(using transitionContext: UIViewControllerContextTransitioning) {
        guard let fromVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) else {
            return
        }
        UIView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations: {
            self.backgroundColorView.backgroundColor = UIColor.black.withAlphaComponent(0.0)
            let bounds = UIScreen.main.bounds
            fromVC.view.frame = fromVC.view.frame.offsetBy(dx: 0, dy: bounds.size.height)
        }, completion: {
            finished in
            transitionContext.completeTransition(true)
        })
    }

}
我已经在控制器中实现了
UIViewControllerTransitioningDelegate
方法,该方法将像这样使用此转换:

extension PopupViewController: UIViewControllerTransitioningDelegate {

    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        transitionAnimator.dismiss = false
        return transitionAnimator
    }

    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        transitionAnimator.dismiss = true
        return transitionAnimator
    }

}
当我没有在动画中使用弹簧时(例如阻尼设置为1),它可以完美地工作。但是,如果我在动画中包括spring(如本例中所示),则当控制器关闭时,屏幕将闪烁黑色:


不知道为什么会这样。你知道我可能做错了什么吗?在哪里?任何指点都将不胜感激

这里也有同样的问题,你有什么新发现吗?