У меня есть небольшой тестовый проект с пользовательскими объектами UIStoryboardSegue, но анимация имеет черную тень.Любой способ удалить это? - PullRequest
0 голосов
/ 03 октября 2018

Я разрабатываю небольшой тестовый проект в Xcode 10 для iOS.Я в основном тестирую пользовательские UIStoryboardSegues.Я подготовил тестовый проект для демонстрации неправильного поведения.

Во время анимации перехода на экране появляется черная тень.Вы можете увидеть это в тестовом проекте, потому что я установил время анимации на 5 секунд.Любая помощь очень ценится.Спасибо

1 Ответ

0 голосов
/ 03 октября 2018

То, что вы видите, - это изменяющаяся непрозрачность вида вблизи начала и конца анимации, поэтому «тень», которую вы видите, на самом деле является задним окном.Хотя это может и не быть идеальным, быстрое решение состоит в том, чтобы изменить цвет фона вашего окна, чтобы он соответствовал цвету фона вашего конечного контроллера представления (затем установите его обратно после завершения перехода, если это необходимо).

т.е.

// 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;
// do the transition
[sourceViewController.navigationController pushViewController:destinationController animated:NO];
// 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;
    }
});

Вам также необходимо переключить анимацию на слой sourceView:

[sourceViewController.view.layer addAnimation:transition forKey:nil];

Но на самом деле это всего лишь обходной путь, чтобы сделать его немного лучше.Вместо использования пользовательских сегментов раскадровки я бы очень рекомендовал использовать пользовательские аниматоры, которые дадут вам гораздо больший контроль над переходом анимации.

Мой ответ здесь: IOS / Objective-C:Можно ли использовать пользовательский сегмент в модальном переходе в отсутствие раскадровки Segue? содержит полный пример пользовательских аниматоров SlideUp / SlideDown.

А вот ссылки на документацию для него:

https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/CustomizingtheTransitionAnimations.html

https://developer.apple.com/documentation/uikit/uiviewcontrollertransitioningdelegate?language=objc

https://developer.apple.com/documentation/uikit/uiviewcontrolleranimatedtransitioning?language=objc

...