ios - 自定义 Segue 类 UIView 动画问题

标签 ios swift animation uiviewcontroller segue

我在使用 swift 3 和 iOS 8 创建自定义 Segue 时遇到问题。我试图通过从一个 VC 淡出到黑屏,然后从黑色淡出到第二个 VC 来在 View Controller 之间进行转换。我尝试通过使用下面的代码创建自定义转场来实现转场,但它没有像我希望的那样工作。我的目标是当黑色方 block 从 0.5 alpha 变为 1.0 alpha 时执行动画,然后呈现我的第二个 View Controller ,然后将黑色方 block 从 1.0 alpha 设置回 0.5 alpha 并删除它。现在,它正确地完成了第一部分,但在动画完成后,您可以在第二个 VC 弹出之前短暂地看到第一个 VC。我应该如何更改代码以使过渡更平滑并获得所需的结果?

override func perform() {
    let sourceVC = self.source
    let destinationVC = self.destination

    let square = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
    square.alpha = 0.5
    square.backgroundColor = UIColor.black
    sourceVC.view.addSubview(square)

    UIView.animate(withDuration: 0.2, animations: {
        square.alpha = 1.0
    })

    UIView.animate(withDuration: 0.2, delay: 0.2, animations: { 
        square.alpha = 0.5
    }) { (finished) in
        sourceVC.present(destinationVC, animated: false, completion: nil)
    }
}

最佳答案

像下面一样更新您的代码并尝试:

   UIView.animate(withDuration: 0.2, animations: {
        square.alpha = 1.0

UIView.animate(withDuration: 0.2, delay: 0.2, animations: { 
                    square.alpha = 0.5
                }) { (finished) in

    DispatchQueue.main.async {
      sourceVC.present(destinationVC, animated: false, completion: nil)
    }
    })
    }

关于ios - 自定义 Segue 类 UIView 动画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41327117/

相关文章:

ios - 什么队列应该委托(delegate)代码运行

iphone - IOS CATransform3DMakeRotation 需要矢量方面的帮助

iphone - 使用 UIGraphicsPushContext(context) 和 UIGraphicsPopContext()

javascript - AnimationMixer 不会播放动画(gltf 文件)

flutter - 旋转变换动画在Flutter中不起作用

iphone - 捏合以增大/缩小按钮的大小

ios - 在函数外使用来自 Alamofire 请求的值

ios - Swift Calendar.current 内存泄漏?

ios - 如何根据确认对话框防止SegmentedControl索引更改?

javascript - blast.js 动画与 jquery ui 彩色动画