Miałem działający niestandardowy UIPresentationController przed Xcode beta 2 i iOS 10 beta 2. Nie zmieniłem żadnego kodu, ale prezentacja jest teraz prezentowana za pomocą standardowej prezentacji modalnej.Utrata odwołań do przeniesieniaDelegate przed prezentacją presetentation
Jest uwaga w przykładowym kodzie firmy Apple dla UIPresentationController który mówi:
Na prezentacji, która będzie wykorzystywać kontroler zwyczaj prezentacji, możliwe jest, że kontroler prezentacja być również transitioningDelegate. Zapobiega to wprowadzaniu kolejnego obiektu lub implementacji w kontrolerze widoku źródłowego .
transitioningDelegate nie posiada silne odniesienie do miejsca przeznaczenia object.To zapobiec presentationController od bycia wydany przed wywołaniem -presentViewController: animowane: Zakończenie: atrybut NS_VALID_UNTIL_END_OF_SCOPE jest dołączona do deklaracji .
Sprawdziłem przeniesienieDelegate na przedstawionym kontroler widoku przed i po prezentacji. Przed tym jest mój niestandardowy UIPresentationController, ale po nim jest zero. Domyślam się, że odwołanie jest wydawane, ale nie mogę znaleźć odpowiednika NS_VALID_UNTIL_END_OF_SCOPE w Swift. EDYTOWANIE: Sprawdziłem, że przeniesienieDelegate jest ustawione na chwilę przed prezentacją, a następnie jest zerowe, gdy nadejdzie czas przedstawienia.
Mój kod w kontrolerze widoku prezentowanie:
@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)
})
}
A mój kod w UIPresentationController:
override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) {
super.init(presentedViewController: presentedViewController, presenting: presentingViewController)
presentedViewController.modalPresentationStyle = .custom
}
spróbuj zadeklarować presentationController przed zewnętrzną metodą. –
Próbowałem, ale nadal mam ten sam problem. – jjatie
spróbuj tego self.presentedViewController.transitioningDelegate –