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"?
Ответы
Ответ 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
Спасибо, ребята,