Мне сложнее всего представить презентацию выдвижного ящика на экране iPhone.
РЕДАКТИРОВАТЬ: я обнаружил, что iOS не соответствует .custom modalTransitionStyle, который я установил в Segue. Если я установлю это явно в prepareForSegue:
, то вызовет мой делегат, чтобы получить UIPresentationController
.
У меня есть пользовательский Segue, который также является UIViewControllerTransitioningDelegate. В методе perform()
я установил для конечного объекта transitioningDelegate значение:
self.destination.transitioningDelegate = self
и я либо звоню super.perform()
(если это модальный подарок или присутствует в качестве попугера), либо self.source.present(self.destination, animated: true)
(если это пользовательский переход, потому что вызов super.perform()
вызывает исключение).
Методы perform()
и animationController(…)
вызываются, но никогда presentationController(forPresented…)
.
Изначально я пытался сделать Segue в раскадровке «Представлять модально» с указанным моим классом Segue, но при этом не удалялся контроллер представления представления. Я попробовал «Представить как Popover», и клянусь, он сработал один раз, потому что он не удалял контроллер представления представления, но затем при последующих попытках он все же делал.
Итак, я сделал это "Custom", и perform()
все еще вызывается с предустановкой _UIFullscreenPresentationController
на контроллере представления назначения, и мой метод presentationController(forPresented…)
никогда не вызывается.
Другие решения, связанные с этой проблемой, всегда зависят от неверно написанной подписи метода. Это мое, дословно:
public func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController?
Последние четыре дня я пытался выяснить «правильные» пользовательские переходы, и это не помогает, чтобы вещи не выглядели так, как рекламируется. Чего мне не хватает?