在 iOS 开发中,可以通过以下两种方法来监听屏幕的旋转:

  1. 重写 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) {
        // 处理屏幕旋转后的代码
        // ...
    }];
}
  1. 监听 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: 方法中处理屏幕旋转后的动画操作。
  • 确保在不需要监听屏幕旋转的时候,及时取消监听通知,避免内存泄漏。
iOS 开发 - Objective-C 监听屏幕旋转指南

原文地址: https://www.cveoy.top/t/topic/qmEn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录