Swift 3 | Проверьте, является ли контроллер представления корнем изнутри.
Вы можете получить доступ к window
с помощью контроллера вида, вам просто нужно использовать self.view.window
.
Контекст: мне нужно обновить положение представления и вызвать анимацию, когда устройство повернуто. Я хочу сделать это только в том случае, если контроллер просмотра активен.
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(
self,
selector: #selector(deviceDidRotate),
name: .UIApplicationDidChangeStatusBarOrientation,
object: nil
)
}
func deviceDidRotate() {
guard let window = self.view.window else { return }
// check if self is root view controller
if window.rootViewController == self {
print("vc is self")
}
// check if root view controller is instance of MyViewController
if window.rootViewController is MyViewController {
print("vc is MyViewController")
}
}
}
Если повернуть устройство во время MyViewController активен, вы увидите эти строки печати на консоли. Если MyViewController неактивен, вы их не увидите.
Если вам интересно, почему я использую UIDeviceOrientationDidChange
вместо .UIDeviceOrientationDidChange
, посмотрите на this answer.
Вы пытаетесь определить, является ли это экземпляром определенного класса или конкретного экземпляра? – mc01
Экземпляр класса – user83039