У меня был рабочий пользовательский UIPresentationController до Xcode beta 2 и iOS 10 beta 2. Я не менял никакого кода, но теперь презентация представлена в стандартном модальном представлении.
В примере кода Apple для UIPresentationController есть примечание:
Для презентаций, которые будут использовать настраиваемый контроллер презентации, этот контроллер презентации также может быть transitioningDelegate. Это позволяет избежать введения другого объекта или реализации в контроллере исходного представления.
transitioningDelegate не содержит сильной ссылки на свой целевой объект. Чтобы предотвратить выпуск PresentViewController до вызова -presentViewController: animated: completion: к объявлению добавляется атрибут NS_VALID_UNTIL_END_OF_SCOPE.
Я проверил transitioningDelegate на представленном контроллере представления до и после презентации. Раньше это мой пользовательский UIPresentationController, а после - ноль. Я предполагаю, что ссылка выпущена, но я не могу найти эквивалент NS_VALID_UNTIL_END_OF_SCOPE в Swift. РЕДАКТИРОВАТЬ: Я проверил, что transitioningDelegate настроено непосредственно перед презентацией, а затем равно нулю, когда пора представить.
Мой код в контроллере представления представления:
@IBAction func buttonAction(_ sender: UIButton) {
let secondViewController = storyboard!.instantiateViewController(withIdentifier: "NewViewController") as! NewViewController
let presentationController = MyPresentationController(presentedViewController: secondViewController, presenting: self)
presentationController.initialFrame = button.frame
secondViewController.transitioningDelegate = presentationController
// Move map
let pixelsToMove: CGFloat = mapView.frame.height / 4
let region = self.mapView.region
self.mapView.setRegion(region, offsetBy: pixelsToMove, animated: true)
// Delegate to NewViewController
secondViewController.mapView = mapView
mapView.delegate = secondViewController
print(secondViewController.transitioningDelegate)
UIView.animate(withDuration: 0.3, animations: {
let tabBar = self.tabBarController!.tabBar
tabBar.frame.origin.y += tabBar.frame.height
self.present(secondViewController, animated: true, completion: nil)
})
}
И мой код в UIPresentationController:
override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) {
super.init(presentedViewController: presentedViewController, presenting: presentingViewController)
presentedViewController.modalPresentationStyle = .custom
}