Когда пользователь поворачивает устройство в ViewA от портрета до пейзажа, я представляю ViewB. Когда ViewB поворачивается назад к портрету, я представляю (отказываясь назад) ViewA. ViewA представляет детали, в то время как переход к ViewB представляет диаграмму. Вот мой код:
ViewA
override func viewWillAppear(_ animated: Bool)
{
UIDevice.current.beginGeneratingDeviceOrientationNotifications()
NotificationCenter.default.addObserver(self, selector: #selector(ViewA.segueToLandscapeGraph), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
}
@objc func segueToLandscapeGraph()
{
let deviceOrientation = UIDevice.current.orientation
print("fired! From ViewA")
if UIDeviceOrientationIsLandscape(deviceOrientation){
self.performSegue(withIdentifier: "graphLandscapeSegue", sender: self)
}
}
ViewB
override func viewWillAppear(_ animated: Bool)
{
UIDevice.current.beginGeneratingDeviceOrientationNotifications()
NotificationCenter.default.addObserver(self, selector: #selector(ViewB.cancelOutOfLandscapeToPortrait), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
}
@objc func cancelOutOfLandscapeToPortrait()
{
let deviceOrientation = UIDevice.current.orientation
print("fired! From ViewB")
if UIDeviceOrientationIsPortrait(deviceOrientation){
dismiss(animated: true, completion: nil)
}
}
@IBAction func cancelOutOfSegue(_ sender: Any)
{
//This button is a failsafe for when app is stuck on this view
dismiss(animated: true, completion: nil)
}
Это прекрасно работает для первых двух вращений. Затем он застревает в ViewB, независимо от того, в каком направлении я его поворачиваю. У меня есть кнопка повышенной безопасности, чтобы выйти из ViewB обратно в ViewA для этого.
В отладчике я вижу много: если мы находимся в реальном обработчике предварительной фиксации, мы не можем добавить какие-либо новые заборы из-за ограничения CA
и
Попытка представить ViewB.GraphLabelDetailinLandscape: 0x7fa893450360 в> MyApp.ViewA: 0x7fa893851000, чье представление не находится в иерархии окон!