Экран запуска, который ведет себя так же, как Launch Image

Чтобы заставить iPad Pro использовать полное разрешение при запуске, мы должны использовать файл экрана запуска.

Я никогда не использовал Launch Screen XIB/Storyboard раньше, потому что мое приложение обратно совместимо с iOS 7. Обычно я использую каталог ресурсов LaunchImage, чтобы определить конкретное статическое изображение для каждого измерения устройства и ориентации запуска.

Сейчас я пытаюсь определить файл экрана запуска, который действует как каталог ресурсов LaunchImage, но я изо всех сил пытаюсь это сделать. Особенно:

1) Я не вижу хорошего способа выбора другого UIImage в зависимости от точного размера устройства, например, показать одно изображение пользователям iPhone 4S и другое изображение пользователям iPhone 5.

2) Я не вижу способа выбора другого UIImage для iPad Portrait и iPad Landscape. Классы размера, похоже, считают, что iPad Portrait и iPad Landscape имеют "обычную" ширину и "Regular" высоту, поэтому любой UIImage, который будет отображаться на iPad Portrait, также будет отображаться в iPad Landscape.

4 ответа

Система загружает файл запуска перед запуском приложения, что создает некоторые ограничения на то, что оно может содержать (некоторые из которых могут заставить вас вернуться к статическим файлам изображений):

1.Приложение еще не загружено, поэтому иерархия представлений не существует, и система не может вызвать какой-либо пользовательский код установки контроллера представления, который вы можете иметь в приложении (например, viewDidLoad)

2.Вы можете использовать только стандартные классы UIKit, поэтому вы можете использовать UIView или UIViewController, но не пользовательский подкласс. Если вы попытаетесь установить пользовательский класс, вы получите ошибку незаконной конфигурации в XCode.

3.Запускаемый файл может использовать только базовые представления UIKit, такие как UIImageView и UILabel. Вы не можете использовать UIWebView.

4.Если вы используете раскадровку, вы можете указать несколько контроллеров представления, но опять же есть некоторые ограничения. Например, вы можете встроить контроллеры представления в контроллер навигации или панели вкладок, но более сложные классы контейнеров, такие как UISplitViewController, не работают (по крайней мере, пока).

5. Локализация файла запуска в настоящее время, похоже, не имеет никакого эффекта. Базовая локализация всегда используется, поэтому вы, вероятно, захотите избежать текста на экране запуска.

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

Обратите внимание, что если вы развертываете на iOS 7, вам все равно нужно будет включить статические файлы образа запуска. Вы можете включить как файл образа запуска, так и статические образы запуска. Устройства, такие как iPhone 6 под управлением iOS 8, будут использовать файл образа запуска, в то время как устройства iOS 7 будут откатываться к образам запуска.

Вы можете использовать классы размера для указания разных изображений для экранов разных размеров, но это не поможет вам справиться со случаями экранов iPhone 4S и iPhone 5

  1. Сначала создайте все ваши изображения. Затем откройте каталог ресурсов и щелкните правой кнопкой мыши -> Значки приложений и изображения запуска -> Новое изображение запуска iOS. Это создаст файл для перетаскивания всех ваших файлов в. Сделай это. Назовите актив "Запуск".

  2. Создайте новую раскадровку экрана запуска с помощью команды n. Выберите iOS -> Пользовательский интерфейс -> Экран запуска. Назовите файл "Экран запуска".

  3. В раскадровке Launch Screen выберите вид контроллера представления

[выбирая вид,

  1. Найдите заполнитель UIImageView из библиотеки объектов в нижнем углу правой стороны ba и перетащите его в представление экрана запуска.

UIImageView

  1. Теперь выберите представление изображения в раскадровке и введите имя изображения из каталога ресурсов.

  1. Управляйте перетаскиванием из UIImageView в представление контейнера, чтобы настроить ограничения автоматического размещения следующим образом:

  1. Необязательно... если вы хотите, чтобы он хорошо смотрелся в вашей раскадровке, выберите представление и выполните option-cmd-=, чтобы обновить фрейм UIImageView.

  2. Перейдите в ваш info.plist и введите название раскадровки ("Launch Screen") для клавиши "Базовое имя файла интерфейса экрана запуска"

  3. Очистить и запустить.

Надеюсь, это поможет, и я ничего не забыл!

Другой подход заключается в использовании разделительных видов, которые размещают правильное изображение в видимой области и перемещают другое изображение за пределы экрана (см. Мой оригинальный ответ на аналогичный вопрос здесь).

Вы не можете предоставить разные изображения для экрана разных размеров (iPhone 4, iPhone X, ...), но если вам нужны разные изображения для iPhone и iPad и разные изображения для портрета и ландшафта, это решение для вас.

Я создал пример проекта на github, если вы хотите попробовать его. Работает на iPad и iPhone.

Важные ограничения

PortraitSpacer.width ≤ 5 × view.width
PortraitSpacer.width ≤ 5 × view.height

LandscapeSpacer.width ≥ 5 × view.width
LandscapeSpacer.width ≥ 5 × view.height

PositionSpacer.width = 5 × view.width

где view.width а также view.height ширина и высота основного вида.

PortraitSpacer позиционирует портретное изображение в 5 × min(view.width, view.height), LandscapeSpacer позиционирует ландшафтное изображение в 5 × max(view.width, view.height) и PositionSpacer имеет ту же ширину, что и PortraitSpacer в портретном режиме и такой же ширины, как LandscapeSpacer в ландшафтном режиме.

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

5 × min(view.width, view.height) + max(view.width, view.height) ≤ 5 × max(view.width, view.height)

В ландшафтном режиме это будет означать

5 / 4 ≤ view.width / view.height

это относится ко всем текущим устройствам: iPad имеет самое низкое соотношение сторон 4:3, которое все еще больше 5:4.

Затем вы можете, конечно, настроить изображения для устройства (iPhone, iPad) в каталоге активов.

Это решение для iPad, которое может работать,

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

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

Вот пример того, как я это сделал.

Создать раскадровку для запуска iPad

UILaunchStoryboardName ~ ipad (UILaunchStoryboardName ~ iphone)

Возьмите свой пейзаж в моем случае 2048x1536

Я взял пейзажное изображение и разрезал его на три части.

  1. Центр 1536x1536
  2. Левый 256x1536
  3. Право 256x1536

На раскадровке запуска я создал 3 просмотра изображений со следующими ограничениями

Центральная часть:

  • Pin вверху и внизу,
  • центр в супервизии,
  • сохранять пропорции

Левый и правый кусок:

  • 0 Трейлинг / Ведущий к центру,
  • Выровнять верх,
  • Равная высота

Затем для режима просмотра слева и справа я изменил его с аспектной заливки на нижнюю правую и нижнюю левую (работал лучше всего для меня)

Я знаю, что это кажется излишним для чего-то, что должно быть простым. Моя причина использования раскадровки запуска над образами запуска состояла в том, чтобы сократить размер приложения. Мне нужно было меньше загрузочных образов, и я мог бы использовать JPEG, а не PNG

Другие вопросы по тегам