如何开发多个iOS设备,即多个故事板?

时间:2013-01-02 17:32:00

标签: xcode ios-simulator uistoryboard

我目前正在为iPhone 3GS开发应用程序。部署目标设置为5.1,我创建了一个包含大量segue和场景的丰富故事板。昨晚我想到了我想让iPad,iPhone 4和iPhone 5上的应用程序可用。我决定为不同的屏幕尺寸/分辨率创建一个单独的故事板。现在我不确定这是不是最好的做法,因为我刚刚开始阅读SO上的弹簧和支柱,所以我不太了解它的信息,但为了我的缘故,我只想发布一个不同的故事板当应用程序完成启动时。然而,这种期望的效果并没有发生。

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    // ViewControllerWelcome *viewControllerWelcome = (ViewControllerWelcome *)[[ViewControllerWelcome alloc]init];

//    NSManagedObjectContext *context = (NSManagedObjectContext *) [self managedObjectContext];
//    if (!context) {
//        NSLog(@"\nCould not create *context for self");
//    }

    //[viewControllerWelcome setManagedObjectContext:context];

    // Do I need to declare my view controllers here?

    // Pass the managed object context to the view controller.

    CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;

    if (iOSDeviceScreenSize.height == 480)
    {
        // Instantiate a new storyboard object using the storyboard file named iPhoneLegacy
        UIStoryboard *iPhoneLegacy = [UIStoryboard storyboardWithName:@"iPhoneLegacy" bundle:nil];

        // Instantiate the initial view controller object from the storyboard
        UIViewController *ViewControllerWelcome = [iPhoneLegacy instantiateInitialViewController];

        // Instantiate a UIWindow object and initialize it with the screen size of the iOS device
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        // Set the initial view controller to be the root view controller of the window object
        self.window.rootViewController = ViewControllerWelcome;

        // set the window object to be the key window and show it
        [self.window makeKeyAndVisible];
    }

    if (iOSDeviceScreenSize.height == 968)
    {
        // Instantiate a new storyboard object using the storyboard file named iPhone4
        UIStoryboard *iPhone4 = [UIStoryboard storyboardWithName:@"iPhone4" bundle:nil];

        UIViewController *ViewControllerWelcome = [iPhone4 instantiateInitialViewController];
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        self.window.rootViewController  = ViewControllerWelcome;
        [self.window makeKeyAndVisible];
    }

    // iPhone 5 1136 x 640

    // iPad Legacy 1024 x 768

    return YES;
}

当我尝试测试模拟器中是否加载了不同的故事板文件时,模拟器只会加载iPhoneLegacy故事板。

此代码是否仅适用于物理设备,我是否需要单独的模拟器代码?

1 个答案:

答案 0 :(得分:4)

所有的拳头,删除你的额外故事板!你只需要一部用于iPhone,一部分用于iPad。

有一种简单的方法可以为所有iPhone / iPod Touch尺寸制作单个故事板。

  1. 仅为iPhone屏幕尺寸保留一个故事板(包括iPhone 5)。
  2. 为所有图片制作一个@ 2x文件。
  3. 要在3.5英寸和4英寸之间切换,Apple会在右下角提供一个按钮,该按钮看起来像一个带箭头指向或向外的矩形 - 该按钮将在3.5和4英寸屏幕尺寸之间切换。
  4. 就是这样!实际上,每个iPhone / iPod Touch都不需要代码来制作单个故事板。


    对于iPad,您需要创建一个为iPad制作的新故事板,并且您需要更新UI代码以确保它与iPhone和iPad屏幕尺寸兼容。同样,请确保为iPad制作@ 2x图像尺寸。