iOS 开发 - Objective-C 监听屏幕旋转指南
在 iOS 开发中,可以通过以下两种方法来监听屏幕的旋转:
- 重写
viewWillTransitionToSize:withTransitionCoordinator:方法
在需要监听屏幕旋转的 UIViewController 中,重写 viewWillTransitionToSize:withTransitionCoordinator: 方法。这个方法在屏幕旋转之前会被调用。
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
// 处理屏幕旋转前的代码
// ...
} completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
// 处理屏幕旋转后的代码
// ...
}];
}
- 监听
UIDeviceOrientationDidChangeNotification通知
可以使用 NSNotificationCenter 监听 UIDeviceOrientationDidChangeNotification 通知,以获取屏幕旋转事件。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
- (void)orientationChanged:(NSNotification *)notification {
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
// 处理屏幕旋转的代码
// ...
}
记得在不需要监听屏幕旋转的时候,要取消监听通知:
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
最佳实践:
- 使用
viewWillTransitionToSize:withTransitionCoordinator:方法更适合处理与屏幕尺寸相关的 UI 布局调整和动画效果。 - 使用
UIDeviceOrientationDidChangeNotification通知更适合处理与屏幕方向相关的逻辑,例如数据更新或重新加载。 - 在
viewWillTransitionToSize:withTransitionCoordinator:方法中,可以通过size参数获取到旋转后的屏幕尺寸,并根据不同的尺寸来适配界面布局。 - 在
viewWillTransitionToSize:withTransitionCoordinator:方法中,可以通过coordinator参数来执行动画。可以在animateAlongsideTransition:方法中处理屏幕旋转前的动画操作,在completion:方法中处理屏幕旋转后的动画操作。 - 确保在不需要监听屏幕旋转的时候,及时取消监听通知,避免内存泄漏。
原文地址: https://www.cveoy.top/t/topic/qmEn 著作权归作者所有。请勿转载和采集!