我正在创建一个 UIView 的子类,当方向改变时需要重新布局其子视图。
它需要能够“插入任何地方”而不需要任何额外的代码,所以我宁愿不依赖 UIViewController 方法来检测自动旋转
无论如何,UIView 是否知道方向何时改变?
我正在创建一个 UIView 的子类,当方向改变时需要重新布局其子视图。
它需要能够“插入任何地方”而不需要任何额外的代码,所以我宁愿不依赖 UIViewController 方法来检测自动旋转
无论如何,UIView 是否知道方向何时改变?
像这样的通知来检测方向变化怎么样?
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
但是,在此之前,您需要注册以生成这样的通知。
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
我发现对我来说这比 UIDeviceOrientationDidChangeNotification 效果更好:
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("layoutControls"), name: UIApplicationDidChangeStatusBarOrientationNotification, object: nil)
我什至不需要使用 beginGeneratingDeviceOrientationNotifications 添加第一行。
在 Swift 中,它会这样完成:
NotificationCenter.default.addObserver(self, selector: #selector(orientationChange(inNotification:)), name: NSNotification.Name.UIApplicationDidChangeStatusBarOrientation, object: nil)
@objc private func orientationChange(inNotification:Notification) -> Void {
// handle notification
}