ios - UIDeviceOrientation DidChange 仅适用于 iPhone 7

标签 ios swift nsnotificationcenter uiinterfaceorientation

我正在尝试检测某个 ViewController 中的方向变化。我使用通知和自定义功能。对于 iPhone 7(运行 iOS 10.2),每次通知更改时都会调用旋转功能。但是在使用 iPhone 6(运行 9.3)或 iPhone 6s(运行 10.0)时,该函数仅在屏幕加载时被调用一次,但在我转动手机时不会被调用。

代码:

func rotated() {
    if UIDevice.current.orientation.isLandscape {
        print("Landscape")
    } else {
        print("Portrait")
    }
}

override func viewDidLoad() {
    super.viewDidLoad()        
    UIDevice.current.beginGeneratingDeviceOrientationNotifications()
    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.rotated), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
}

最佳答案

viewWillAppear 函数中设置通知,它应该可以正常工作。在模拟器上可用的设备上对我来说工作正常。实际上,当 View Controller 第一次出现时, View DidLoad 函数只被调用一次。而 View 将在每次加载 View Controller 时调用。

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UIDevice.current.beginGeneratingDeviceOrientationNotifications()
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.rotated), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
 }

关于ios - UIDeviceOrientation DidChange 仅适用于 iPhone 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41877362/

相关文章:

ios - Xcode:当应用程序在后台运行时间超过 5 分钟时,转到 Storyboard 中的第一页?

swift - 两种类型之间的箭头 ( -> ) 在 Swift 中是什么意思?

ios - 如何定位一个SCNNode来覆盖整个SCNView?

swift - 在表格 View 单元格中处理 SWIFT 索引越界问题

ios - Swift 中的 NSNotificationCenter 行为不正确(只调用函数中的某些东西)

IOS - 按钮从右侧动画滑入

ios - 如何制作DateComponentsFormatter.string的第一个字(来自:)'s result capitalised?

c++ - 如何将 std::cout 重定向到 UITextView?

objective-c - UIImageView 不显示从通知中获取的 UIImage

iphone - iOS/iPhone 用户关于重复 NSNotification 观察的警告