Подтвердить что ты не робот

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

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

Кажется, что это два решения для раскадровки. Таким образом, это оставляет мне два вопроса:

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

  • Как мне изменить "Main Storyboard"?

4b9b3361

Ответ 1

Это отличный вопрос.

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

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

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

  • Наконец, в приложении 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, выполните следующие действия.

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

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

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

Совет

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

Ответ 2

В настоящее время единственный способ проверить, используете ли вы 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]. Иначе это всегда будет возвращать false. (Потому что экран будет почтовым ящиком, если у вас нет изображения запуска)

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

Ответ 3

Я получил вдохновение в ответе 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];
        }
    }

Ответ 4

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

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

Тест bool от Обнаруживать 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

  • В верхней части файла найдите targetRuntime="iOS.CocoaTouch "
  • Изменить на targetRuntime="iOS.CocoaTouch.iPad"
  • В нижней части файла вы можете найти этот <simulatedScreenMetrics key="destination" type="retina4"/>
  • Измените это на <simulatedScreenMetrics key="destination"/>

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

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

Ответ 5

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

  • Создайте проект для iPhone5 с раскадрой iPhone5_Storyboard.

  • Закрыть приложение и внутри папки clone the Main История называется iPhone5_Storyboard и переименовывается в iPhone4_Storyboard, не забудьте изменить размер и переупорядочить весь объект внутри построителя интерфейса xcode.

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

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

  • Теперь СПАСИБО ПЕРВОМУ ОТВЕТУ ЭТОЙ СТОЛЫ, мы должны реализовать все разные Story, используя этот код внутри 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

Спасибо, ребята,