同时 UIViewController 过渡动画

Posted

技术标签:

【中文标题】同时 UIViewController 过渡动画【英文标题】:Simultaneous UIViewController Transition Animations 【发布时间】:2018-11-06 00:15:56 【问题描述】:

我正在尝试淡入背景渐变图像并将uiview 卡片从底部(屏幕外)滑到uiviewcontroller 的中心 - 当uiviewcontroller 出现时同时执行两个动画模态的。

我尝试将uiviewcontroller 模态过渡样式设置为交叉溶解,这将为背景渐变图像提供淡入效果,并在viewDidAppear 中运行动画以向上滑动@987654326 @card 从底部到中心。

虽然这可行,但卡有一点延迟,理想情况下我希望两个动画同时发生。

可以这样分组吗?任何指导将不胜感激。

以下是模态呈现的视图控制器中的相关代码:

override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    alertViewCenterYConstraint.constant += view.bounds.height



override func viewDidAppear(_ animated: Bool) 
    super.viewDidAppear(animated)
    UIView.animate(withDuration: 0.1, delay: 0, options: .curveEaseOut, animations: 
        self.alertViewCenterYConstraint.constant = 0
        self.view.layoutIfNeeded()
    , completion: nil)

【问题讨论】:

【参考方案1】:

这个工作就像一个魔术。我喜欢它。

   override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    alertViewCenterYConstraint.constant += view.bounds.height
    DispatchQueue.main.async 
    UIView.animate(withDuration: 0.1, delay: 0.05, options: .curveEaseOut, animations: 
        self.alertViewCenterYConstraint.constant = 0
        self.view.layoutIfNeeded()
    , completion: nil)

    

【讨论】:

完美运行!是因为在主线程上运行动画吗?只是好奇。 是的。你说的对。如果不在主线程上,它会阻塞布局。如果你尝试,你可以看到它。

以上是关于同时 UIViewController 过渡动画的主要内容,如果未能解决你的问题,请参考以下文章

在 2 个 UIViewController 的过渡之间为 UIView 元素设置动画

自定义 UIViewController 过渡动画适用于演示,但不适用于解雇

UIViewController 动画过渡在 iOS8 中失败

带有自定义过渡的 presentViewController

带有旋转的自定义 UIViewController 过渡

UIViewController 过渡在下拉手势关闭时闪烁