Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.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_Objective C_Uiviewanimation - Fatal编程技术网

Ios 在两个白色视图控制器之间转换时,交叉淡入淡出过渡将变为黑色

Ios 在两个白色视图控制器之间转换时,交叉淡入淡出过渡将变为黑色,ios,objective-c,uiviewanimation,Ios,Objective C,Uiviewanimation,我正在演示下一个viewcontroller,它使用了一个segue,过渡设置为交叉溶解,但是尽管源VC和目标VC背景为白色,但在过渡结束时屏幕会变为黑色,有没有办法使其变为透明而不是黑色? 首先,一个好的问题应该包含您的代码或显示您遇到的问题的简化示例代码。gif有助于显示您所看到的内容,但如果没有代码的上下文,您将获得否决票,并且收到的答案将少得多(此外,您收到的答案将主要是猜测/假设,就像我的答案一样) 我猜你看到的是在动画开始和结束附近视图的不透明度变化,所以“当屏幕变黑”你看到的是背景

我正在演示下一个viewcontroller,它使用了一个segue,过渡设置为交叉溶解,但是尽管源VC和目标VC背景为白色,但在过渡结束时屏幕会变为黑色,有没有办法使其变为透明而不是黑色?

首先,一个好的问题应该包含您的代码或显示您遇到的问题的简化示例代码。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;
    }
});