仅为 AppDelegate.m iOS 中的首次启动设置特定方向

Posted

技术标签:

【中文标题】仅为 AppDelegate.m iOS 中的首次启动设置特定方向【英文标题】:Set specific orientation only for first launch in AppDelegate.m iOS 【发布时间】:2019-09-30 17:18:16 【问题描述】:

我将这个库用于我的 react native 项目:

react-native-orientation-locker

我想要实现的是在除一个屏幕之外的所有屏幕上锁定方向为纵向。这个库工作正常,除非用户在横向模式下关闭应用程序,然后尝试在横向模式下打开它。应用程序在很短的时间内以横向打开,然后旋转为纵向。但我不想看到它,而是想在应用启动时以纵向模式打开它。

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 

   /*if (the app has just been launched) 
        return UIInterfaceOrientationMaskPortrait;
   */

   // else, use the library to manage and set orientation
   return [Orientation getOrientation];

我不知道如何检查第一次启动以及在上面的 if 语句中放入什么

【问题讨论】:

【参考方案1】:

native-orientations 是一个非常好的库,可以检测和设置设备的方向。如您所见,文档具有解锁所有方向的属性。 IE; orientation.unlockAllOrientations()

您可以在 componentWillUnmount/ 中使用它来获取应用程序的当前状态并在它进入后台时调用该函数,否则它将强制解锁所有方向,然后您可以在组件确实安装时将方向设置为 potrait主文件,如 app.js。

componentDidMount()

    Orientation.lockToPortrait(); // <----- This will reset stuff before the first unlock


componentWillUnmount() 
    Orientation.unlockAllOrientations();
    Orientation.lockToPortrait();

希望对你有帮助....

【讨论】:

感谢@saikiran 的回复。这就是我已经在做的事情。但它不起作用。当我启动应用程序时,它从横向开始,然后旋转到纵向模式。问题是,关闭应用不会调用componentWillUnmount 好的,然后当您在渲染视图之前打开应用程序时,使用构造函数或 componentWillmount 更新方向【参考方案2】:

您可以简单地检查 UserDefaults 中的某些条目,如果它不包含您提供的对象,则它首先启动。之后,您可以将此对象放入 UserDefaults

例如

if([[NSUserDefaults standardUserDefaults] boolForKey:@"SOME_YOUR_KEY"] == nil) 
    // First faunch Code
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SOME_YOUR_KEY"];
    [[NSUserDefaults standardUserDefaults] synchronize];
 else 
    // Not first launch

【讨论】:

根据您在安装后首次启动应用程序时给出的建议。但这不适用于关闭应用程序并再次打开。如我错了请纠正我。谢谢!!

以上是关于仅为 AppDelegate.m iOS 中的首次启动设置特定方向的主要内容,如果未能解决你的问题,请参考以下文章

检测iOS应用程序的首次启动[重复]

在 iCloud 环境中检测应用程序 (IOS/OSX) 的首次运行

IOS 使用 AppDelegate.m 中 ViewController.m 的方法?

未修改的 AppDelegate.m 中的编译错误

appdelegate.m 中的 UIAlertView 不起作用

iOS AppDelegate的.m文件解析