Как я могу инициализировать вид для ориентации интерфейса? - PullRequest
1 голос
/ 13 августа 2010

Проблема в том, что я запускаю электронную почту в приложении и запускаю клавиатуры (через UITextFields), и они появляются в моем альбомном приложении. Я могу повернуть его портрет, затем снова повернуть пейзаж, наблюдая анимацию черных углов вращения, которая возникает, когда приложение поворачивается от портрета к ландшафту. Поскольку я заблокировал любую ориентацию, кроме ландшафта, в своем методе shouldAutorotateToInterfaceOrientation (), само представление не вращается, и это здорово. Однако, когда я добавляю эти представления, приложение продолжает думать, что они портретные, о чем свидетельствует клавиатура UITextField и ориентация электронной почты в приложении, если я не поверну в портретную ориентацию, а затем обратно в альбомную ориентацию (что вызывает метод автоматического поворота для возврата true.

Любые предложения о том, как я могу заставить это приложение знать, что оно уже в альбомной ориентации, для начала, когда я добавляю представления?

Обновление: я пытался установить ориентацию строки состояния, но она не работает для меня. Я не знаю, есть ли что-то с тем фактом, что я удаляю, а затем добавляю в приложение представления, которые путают его понимание ориентации. Знаете ли вы, как объекты Apple, такие как UITextField и почта в приложении, определяют, какую ориентацию показывать? Они просто опрашивают общую ориентацию приложения? Странно для меня то, что, когда я удаляю и добавляю новые виды, кажется, что эти яблочные виджеты, которые я наклонил телефон, чтобы изменить их на альбомную, внезапно возвращаются к портретному изображению. то есть эта общая последовательность событий:

1) приложение в альбомной ориентации, триггерная клавиатура, показывает портрет

2) Устройство наклона, чтобы заставить его войти в пейзаж. закройте и откройте клавиатуру, и она в альбомной ориентации.

3) удалить и добавить несколько представлений.

4) снова вызвать клавиатуру, она отображается в портрете

Ответы [ 5 ]

1 голос
/ 25 апреля 2011

Настройка Initial interface orientation поле в Project plist

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

[UIApplication setStatusBarOrientation: animated:] должен дать вам то, что вы хотите.

0 голосов
/ 27 апреля 2012

попробуйте это:

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

//Rotate the complete view to look like landscape view
    [self rotateToLandscape];
}

и метод вращения;

-(void)rotateToLandscape
{
    UIWindow *win = [[UIApplication sharedApplication]keyWindow];
if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)){
    [[[UIApplication sharedApplication] keyWindow] setBackgroundColor:[UIColor blackColor]];
    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    win.transform = CGAffineTransformIdentity;
    win.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    win.bounds = CGRectMake(0.0f, 0.0f, 480, 320);
    win.center = CGPointMake(160.0f, 240.0f);
    [UIView commitAnimations];
}   

}

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

Удаление / добавление представлений не должно изменять ориентацию строки состояния;насколько я знаю, это по умолчанию ориентация контроллера представления, если вы не установите его явно (и тогда вы должны быть осторожны, потому что контроллеры представления сбрасывают его).Вы можете попробовать использовать UIStatusBarStyleBlackTranslucent и установить UIViewController.wantsFullScreenLayout на ваших VC, чтобы увидеть, что происходит.

(В прошлом я заметил, что это сбивает с толку, когда я добавляю представление непосредственно в окно поверхтолько для портрета. Кажется, что он работает во всех других случаях ...)

Какова ваша реализация shouldAutorotateToInterfaceOrientation:?

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

Интересно, я обнаружил, что установки ориентации строки состояния при запуске было недостаточно.Наблюдая за значением поля, я заметил, что оно в разное время сбрасывалось на портретное, например, при возврате из отмены почты в приложении.Я обнаружил, что несколько звонков для установки строки состояния решают проблему.Спасибо за ввод, mbehan.

...