Как определить ориентацию при запуске приложения для анимации заставки на iPad! - PullRequest
18 голосов
/ 13 августа 2010

Привет, у меня есть приложение, и у меня есть два * .png для заставки по умолчанию:

Default-Landscape.png Default-Portrait.png

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

Чтобы достичь этого, я обычно представляю UIImageView с default-landscape или default-Portrait (в зависимости от ориентации устройства), сохраняю его на экране в течение определенного времени и затем анимирую.

Моя проблема в том, что если я позвоню [[UIDevice currentDevice] orientation] в

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

Ответ всегда заключается в том, что устройство находится в портретной ориентации, даже если оно четко отображается в альбомной ориентации. Я пробовал это в симуляторе и на устройстве, и поведение такое же.

Кто-нибудь знает решение для этого или, возможно, какой-то другой подход?

Спасибо!

Ответы [ 9 ]

5 голосов
/ 08 августа 2011

У меня были проблемы с этим, и я решил это, сделав одно изображение размером 1024x1024 и установив для contentMode UIImageView значение UIViewContentModeTop, а затем с помощью автоматического изменения размера левого и правого полей. Пока ваши портретные и альбомные изображения по умолчанию имеют одинаковый макет, это будет работать нормально.

Просто чтобы уточнить вот что я использовал:

bgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:SplashImage]];
bgView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
bgView.contentMode = UIViewContentModeTop;
3 голосов
/ 20 ноября 2012

Вы можете использовать UIApplication statusBarOrientation следующим образом:

if ( UIDeviceOrientationIsLandscape( [[UIApplication sharedApplication] statusBarOrientation] ))
    {
    // landscape code
    }
else
    {
    // portrait code
    }
3 голосов
/ 26 августа 2010

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

1 голос
/ 13 января 2011

Чтобы узнать при запуске, какова ориентация (UIDevice ориентация не работает, пока пользователь не повернет устройство), перехватите shouldAutorotateToInterfaceOrientation вашего View Controller, он вызывается при запуске, и вы знаете ориентацию вашего устройства.

1 голос
/ 13 августа 2010

Другим решением будет считывание данных акселерометра и определение ориентации самостоятельно.

1 голос
/ 13 августа 2010

Может быть, вы могли бы показать пустой вид с черным фоном во время запуска и поместить [[UIDevice currentDevice] orientation] в viewDidAppear этого вида и запустить оттуда заставку?

0 голосов
/ 22 февраля 2011

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

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

    // Determine which launch image file
NSString * launchImageName = @"Default.png";
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation])) {
        launchImageName = @"Default-Portrait.png";
    } else {
        launchImageName = @"Default-Landscape.png";
    }
}

// Create a fade out effect
UIImageView* whiteoutView = [[[UIImageView alloc] initWithFrame:self.window.frame] autorelease];
whiteoutView.autoresizingMask = UIViewAutoresizingFlexibleWidth  | UIViewAutoresizingFlexibleHeight;
whiteoutView.autoresizesSubviews = YES;         
whiteoutView.image = [UIImage imageNamed:launchImageName];
[[[self.window subviews] objectAtIndex:0] addSubview:whiteoutView];

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
whiteoutView.alpha = 0.0;
[UIView commitAnimations];

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

0 голосов
/ 12 ноября 2010

Бывают моменты, когда вы хотите перейти от загрузки изображения к чему-то другому, прежде чем пользователь получит контроль над вашим приложением. Если ваше приложение не очень простое, перехода от загрузки изображения к целевой странице, вероятно, будет недостаточно, если приложение не будет действительно отстойным. Если вы когда-либо разрабатываете большое приложение, вам определенно захочется сделать это, чтобы показать прогресс во время установки, загрузки XIB-файлов и т. Д. Если приложению требуется несколько секунд для подготовки без обратной связи, пользователи будут его ненавидеть. ИМО, в этом нет ничего плохого и с хорошим эффектом перехода. Почти никто не использует загрузочные экраны так, как Apple предлагает. Я не знаю, какие приложения, на которые вы смотрели, показывали предлагаемые ими экраны загрузки типа «пустой интерфейс». Черт, даже Apple не делает этого, кроме как в своем примере кода, и никто из моих клиентов не посчитает это приемлемым. Это хромой дизайн.

0 голосов
/ 14 августа 2010

Похоже, вы не используете образ запуска, как Apple рекомендует в iOS HIG . В частности, он призывает не использовать его как заставку, а как скелетную версию вашего реального пользовательского интерфейса. В результате ваше приложение будет готово гораздо быстрее.

В предложениях о том, что вы можете нарисовать заставку самостоятельно после запуска приложения в viewDidAppear или аналогичном, также отсутствует основная цель образа запуска. Это не заставка. Если ваше приложение готово, пусть пользователь взаимодействует с ним, не тратьте свое время на рисование заставки.

Из моего пятиминутного опроса приложений Apple и сторонних приложений все показали портретное изображение запуска, загрузили портретную версию пользовательского интерфейса, а затем повернули в альбомную ориентацию. Прошло много времени с момента программирования на iOS, но я думаю, что это отражает порядок вызовов методов - сначала запускается ваше приложение, затем ему говорят повернуть в определенной ориентации.

Хотя это может быть хорошим запросом на улучшение файла с Apple:)

...