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

Как определить ориентацию при запуске приложения для анимации заставки на iPad!

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

Default-Landscape.png Default-Portrait.png

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

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

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

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

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

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

Спасибо!

4b9b3361

Ответ 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::