私は、Xcode beta 2とiOS 10 beta 2より前に働くカスタムUIPresentationControllerを持っていました。私はコードを変更していませんが、プレゼンテーションは標準モーダルプレゼンテーションで表示されています。そのプレゼンテーションコントローラも transitioningDelegateするためのカスタムプレゼンテーションコントローラを使用するプレゼンテーション用プレゼンテーションプレゼンテーションの前にtransitioningDelegateへの参照を失う
は、 ことが可能です:
氏は述べていますUIPresentationControllerのためのAppleのサンプルコードでの注意事項があります。これにより、別のオブジェクトまたは が導入され、ソースには ビューコントローラが実装されなくなります。アニメーション:終了: NS_VALID_UNTIL_END_OF_SCOPE属性が 宣言に追加され
transitioningDelegateは 解放-presentViewController呼び出す前であることからpresentationControllerを防ぐobject.Toその宛先に強い参照を保持しません。
プレゼンテーションの前後に、提示されたビューコントローラでtransitioningDelegateを確認しました。私のカスタムUIPresentationControllerの前ですが、後はそれがnilです。私の推測では、リファレンスはリリースされているが、SwiftではNS_VALID_UNTIL_END_OF_SCOPEと同等のものは見つからない。 EDIT:私は、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
}
メソッド外にある前にpresentationControllerを宣言してみてください。 –
試しましたが、それでも同じ問題があります。 – jjatie
これを試してくださいself.presentedViewController.transitioningDelegate –