Как определить ориентацию при запуске приложения для анимации заставки на iPad!
Привет У меня есть приложение, и у меня есть два *.png для заставки по умолчанию:
Default-Landscape.png
Default-Portrait.png
Я хочу, чтобы анимировать этот экран заставки по умолчанию, когда мое приложение загружено и готово к работе.
Чтобы достичь этого, я обычно представлял UIImageView как по умолчанию, так и по умолчанию (в зависимости от ориентации устройства), сохраняя его на экране в течение определенного времени, а затем анимируйте его.
Моя проблема в том, что если я назову [[UIDevice currentDevice] orientation]
в
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
Ответ всегда заключается в том, что устройство находится в портретной ориентации, даже если я четко его вижу в ландшафте. Я пробовал это в симуляторе и на устройстве, а поведение одинаковое.
Кто-нибудь знает исправление для этого или, возможно, другого подхода?
Спасибо!
Ответы
Ответ 1
У меня были проблемы с этим, и я решил это, сделав одно изображение 1024x1024 и установив contentMode UIImageView в UIViewContentModeTop, а затем используя автоматическое определение левого и правого полей. Пока ваши портретные и пейзажные изображения по умолчанию одинаковы, это будет работать нормально.
Просто пояснить здесь, что я использовал:
bgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:SplashImage]];
bgView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
bgView.contentMode = UIViewContentModeTop;
Ответ 2
Чтобы обойти эту проблему, я установил изображение всплеска внутри контроллера представления, что позволило обе ориентации. Несмотря на то, что устройство сообщило о неправильной ориентации при запуске, контроллер вида кажется правильным.
Ответ 3
Вы можете использовать статус UApplicationBarOrientation следующим образом:
if ( UIDeviceOrientationIsLandscape( [[UIApplication sharedApplication] statusBarOrientation] ))
{
// landscape code
}
else
{
// portrait code
}
Ответ 4
Может быть, вы могли бы показать пустой вид с черным фоном во время запуска и поместить [[UIDevice currentDevice] orientation]
в это представление viewDidAppear
и запустить там свой заставку?
Ответ 5
Другим решением было бы прочитать данные акселерометра и самостоятельно определить ориентацию.
Ответ 6
Знать в начале, что такое ориентация (ориентация UIDevice
не работает, пока пользователь не повернет устройство) перехватит shouldAutorotateToInterfaceOrientation
вашего контроллера просмотра, он вызывается при запуске, и вы знаете свою ориентацию устройства.
Ответ 7
Конечно, есть время, когда вы хотите перейти от загружаемого изображения к чему-то еще, прежде чем пользователь получит контроль над вашим приложением. Если ваше приложение действительно просто, переход с загрузки изображения на целевую страницу, вероятно, будет недостаточным, если приложение не будет действительно сосать. Если вы когда-либо разрабатываете большое приложение, вы обязательно захотите это сделать, чтобы показать прогресс во время установки, загрузки xib и т.д. Если приложение занимает несколько секунд, чтобы подготовиться без обратной связи, пользователи будут ненавидеть его. ИМО, нет ничего плохого в хорошем эффекте перехода. Почти никто использует экраны загрузки так, как предлагает Apple. Я не знаю, какие приложения вы просматривали, которые показывали экраны загрузки типа "пустой пользовательский интерфейс", которые они предлагают. Черт, даже Apple этого не делает, кроме как в своем примере кода, и ни один из моих клиентов не найдет это приемлемым. Это хромающий дизайн.
Ответ 8
Только первое представление, добавленное в окно, поворачивается ОС. Поэтому, если вы хотите, чтобы ваш экран заставки автоматически вращался, и ваш основной вид вращается, просто добавьте его как дочерний элемент этого представления.
Вот мой код для затухания соответствующего изображения заставки:
// 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];
Примечание. Вам нужно будет обновить его, чтобы поддерживать экраны привет-Res.
Ответ 9
Похоже, вы не используете образ запуска так, как рекомендует Apple в iOS HIG. В нем конкретно указано, что вы не должны использовать его в качестве заставки, а скорее как скелетную версию вашего реального пользовательского интерфейса. Чистый эффект заключается в том, что ваше приложение, похоже, готово к этому гораздо быстрее.
Предложения, которые вы могли бы использовать заставку самостоятельно после запуска приложения в viewDidAppear или аналогичном, также не имеют основной цели изображения запуска. Это не заставка. Если ваше приложение готово, позвольте пользователю взаимодействовать с ним, не тратьте время на создание заставки.
Из моего пятиминутного обзора приложений Apple и сторонних приложений каждый показал изображение с портретом, загрузил портретную версию пользовательского интерфейса, а затем повернулся к пейзажу. Прошло некоторое время с тех пор, как программирование на iOS, но я думаю, что это отражает порядок вызовов метода - сначала запускается ваше приложение, после чего ему предлагается вращаться в определенной ориентации.
Возможно, это хороший запрос на улучшение файла Apple::