Во-первых, хороший вопрос должен содержать ваш код или упрощенный пример кода, отображающий проблему, с которой вы столкнулись. 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
Ответ показывает пользовательский аниматор для анимации слайда вверх / вниз, но он должен дать вам четкое представление о том, как сделать это для перекрестного затухания.