xcode 4.5 как выбрать раскадровки при запуске

Попытка заставить мое приложение работать как с iPhone 5, так и с iPhone 4/4. Я попробовал «AutoLayout», но, похоже, не работает для своего приложения, также прочитал, что он не поддерживается в iOS 5. AutoLayout специально терпит неудачу на controllerе представления, который имеет UIScrollview и UIPicker, которые переразмерены в коде. Имея две раскадровки один на 4 дюйма и один на 3,5 дюйма, кажется, путь.

Кажется, что это два решения для раскадровки. Поэтому это оставляет мне два вопроса;

  1. Где должен код, чтобы определить, если это 4 / 4s / 5 идти? Я предположил бы в appDelegate.m в методе didFinishLaunchingWithOptions

  2. Как изменить «Main Storyboard»?

Это большой вопрос.

Что вам нужно сделать,

  1. Выберите текущую раскладку 4 / 4s, перейдите в раздел «Файл», дублируйте, а затем укажите конкретное имя для iPhone 5. Убедитесь, что Target и ваше имя приложения проверены.

  2. Затем вам нужно выбрать сцены в вашем раскадровке, а в инспекторе атрибутов измените размер на Fullina Retina 4. Это позволяет вам переупорядочить все для этого дисплея.

  3. Наконец, в приложении didFinishLaunchingWithOptions вставьте следующий код с именем раскадровки, которое вы дали для своего 4-дюймового раскадровки.

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ UIStoryboard *storyBoard; CGSize result = [[UIScreen mainScreen] bounds].size; CGFloat scale = [UIScreen mainScreen].scale; result = CGSizeMake(result.width * scale, result.height * scale); if(result.height == 1136){ storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_5" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; } } return YES; } 

Если кто-то не знает, как сделать шаг 1, сделайте, как показано ниже.

  1. Перейдите в каталог проекта и скопируйте MainStoryboard.storyboard и переименуйте новую раскадровку, чтобы сказать MainStoryboard5.storyboard .

  2. Добавьте новую MainStoryboard5.storyboard в проект (в Xcode), щелкнув правой кнопкой мыши Project и нажав Add Files to ....

  3. Теперь у нас есть две раскадровки в xcode.

Наконечник

Возможно, вам придется использовать «Продукт> Очистить», чтобы это работало после того, как вы все это сделали.

В настоящее время единственный способ проверить, используете ли вы iPhone 5, – [UIScreen mainScreen] bounds] и [[UIScreen mainScreen] scale] .

 BOOL isIphone5 = (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) && (([UIScreen mainScreen].bounds.size.height * [[UIScreen mainScreen] scale]) >= 1136)); 

Это работает только в том случае, если вы, по крайней мере, добавили [email protected] запуска [email protected] в свое приложение. Иначе это всегда будет возвращать false. (Потому что экран будет почтовым ящиком, если у вас нет изображения запуска)

Чтобы настроить раскадровку на версию вашего iPhone 5, вы можете взглянуть на этот вопрос

Я воодушевлен ответом fields.cage и адаптировал его к своему коду, он отлично работает. Благодаря !!

 if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ UIStoryboard *storyBoard; CGSize result = [[UIScreen mainScreen] bounds].size; CGFloat scale = [UIScreen mainScreen].scale; result = CGSizeMake(result.width * scale, result.height * scale); if(result.height == 1136){ self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone5" bundle:nil] autorelease]; } else { self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease]; } } 

То, что я делал недавно, – это добавить инструкцию define в любые classы, которые я должен проверить на устройстве. Это также можно сделать в любых глобальных файлах заголовков.

 #define IS_IPHONE (!IS_IPAD) #define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone) 

Тест bool находится на экране Detect iphone 5 4 ” .

 bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136)); if (isiPhone5) { // Setup For iPhone 5 Screen Size UIStoryboard *storyBoard; storyBoard = [UIStoryboard storyboardWithName:@"MyiPhone5StoryboardName" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; } 

Это прекрасно работает, если вы уже используете раскадровки и хотите изменить раскадровку по умолчанию, с которым начинался ваш проект для устройств iPhone 5. Если вы начинаете с нуля с существующего проекта без раскадровки, вы можете сделать это таким образом.

 #define IS_IPHONE (!IS_IPAD) #define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone) bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136)); if (isiPhone5) { // Load iPhone 5 Storyboard UIStoryboard *storyBoard; storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone5" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; } else if (IS_IPAD) { // Load IPAD StoryBoard UIStoryboard *storyBoard; storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; } else { // Load the iPhone 3.5" storyboard UIStoryboard *storyBoard; storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; } 

Когда я начинаю проект, я разрабатываю версию iPhone 3.5 в раскадровках (если я использую раскадровки), тогда, когда я закончил с этим дизайном, я заглядываю в свои файлы проекта и нахожу файл раскадровки. Поскольку файл раскадровки – это всего лишь XML-файл макета, я могу взять этот файл и загрузить его в свой любимый текстовый редактор и изменить два тега.

Конвертировать iPhone в iPad

  1. В верхней части файла найдите targetRuntime="iOS.CocoaTouch
  2. Изменить на targetRuntime="iOS.CocoaTouch.iPad"
  3. В нижней части файла вы можете найти этот
  4. Измените это на

Последний элемент появится, только если ваш основной файл раскадровки настроен для 4-дюймового экрана iPhone.

Важно то, что если вы добавляете только iPhone 5 в существующий проект, вам нужна только первая проверка, чтобы переопределить значение по умолчанию и загрузить свой специальный файл раскадровки. Это буквально спасло меня от необходимости вручную размещать все объекты в коде для iPhone 5.

Первая работа Очень хорошая, простая и понятная, но для всех, если вы хотите интегрировать многопользовательские устройства, смотрите здесь:

  1. Создайте проект для iPhone5 с раскадрой по имени iPhone5_Storyboard.

  2. Закройте приложение и внутри папки клонируйте главную историю под названием iPhone5_Storyboard и переименуйте ее на iPhone4_Storyboard, не забудьте resize и переупорядочить весь объект внутри создателя интерфейса xcode.

  3. Необязательно, если вы хотите универсальную версию, внутри xcode используйте «Добавить файл» и добавьте новую целевую страницу Storyboard EMPTY для iPad, ope un iphone5_storyboard используйте CMD + A и скопируйте все и вставьте в «Пустую историю для iPad» (нужно переупорядочить объект, но все связано и работает).

  4. В Xcode под TARGET установите универсальное приложение и настройку под MainStoryboard, вы iPhone5_Storyboard, в настройках iPad Main Story iPad_Storyboard.

  5. Теперь СПАСИБО ПЕРВОМУ ОТВЕТУ ЭТОЙ СТОЛЫ, мы должны реализовать все разные Истории, используя этот код внутри AppDelegate.m :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ UIStoryboard *storyBoard; CGSize result = [[UIScreen mainScreen] bounds].size; CGFloat scale = [UIScreen mainScreen].scale; result = CGSizeMake(result.width *scale, result.height *scale); //----------------HERE WE SETUP FOR IPHONE4/4s/iPod---------------------- if(result.height == 960){ storyBoard = [UIStoryboard storyboardWithName:@"iPhone4_Storyboard" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; } //----------------HERE WE SETUP FOR IPHONE3/3s/iPod---------------------- if(result.height == 480){ storyBoard = [UIStoryboard storyboardWithName:@"iPhone4_Storyboard" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; } } return YES; } 

Теперь у нас есть универсальное приложение для iPhone 3 / 3Gs / 4 / 4s / 5 iPod (AllGen) iPad 1/2/3/4 Mini и Retina

Спасибо, парни

Давайте будем гением компьютера.