在2个白色ViewController之间进行过渡时,Crossfade过渡会变为黑色

时间:2018-11-09 16:41:57

标签: ios objective-c uiviewanimation

我正在使用过渡设置为交叉溶解的segue模态呈现下一个viewcontroller,但是尽管源VC和目标VC背景是白色,但在过渡结束时屏幕会变为黑色,它浸入清除而不是黑色? enter image description here

1 个答案:

答案 0 :(得分:0)

首先,一个好的问题应该包含您的代码或简化的示例代码,以显示您遇到的问题。 gif有助于显示您所看到的内容,但是如果没有代码上下文,您将获得低票和更少的答案(加上收到的答案主要是猜测/假设,例如我的是)。

我的猜测是,您看到的是动画开始和结束时视图的不透明度不断变化,因此“当屏幕变黑时”您将看到后窗。尽管这可能并不完美,但一种快速的解决方法是更改​​窗口的背景颜色以使其与目标视图控制器的背景颜色匹配(然后在过渡完成后根据需要将其重新设置)。

// within your perform method for the transition
// hold onto the previous window background color
UIColor *previousWindowBackgroundColor = sourceViewController.view.window.backgroundColor;
// switch the window background color to match the destinationController's background color temporarily
sourceViewController.view.window.backgroundColor = destinationController.view.backgroundColor;
...
// perform the transition
// switch the window color back after the transition duration from above
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(animationDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    // make sure we still have a handle on the destination controller
    if (destinationController) {
        destinationController.view.window.backgroundColor = previousWindowBackgroundColor;
    }
});

推荐,而不是自定义搜索过渡:

通过创建自己的动画制作者来使用自定义动画过渡工作流程,如我在此处的答案所述:https://stackoverflow.com/a/52396398/7833793

答案显示了用于上/下滑动动画的自定义动画器,但是它也应该使您清楚地知道如何针对交叉淡入淡出进行动画处理。