2010-05-17 8 views
0

Когда приложение, над которым я работаю, устанавливается либо через Ad-Hoc через iTunes, либо создается непосредственно на устройство, при запуске в первый раз единственный контроллер просмотра в моем приложении, которое реагирует на изменения ориентации, не получает звонки на shouldAutorotateToInterfaceOrientation: с переданным ландшафтным аргументом; отладка показывает, что это только для портрета. Каждый последующий запуск ведет себя так, как я ожидал, т. Е. Есть призывы к shouldAutorotateToInterfaceOrientation:, сделанные как с пейзажными, так и с портретными аргументами. Это точное поведение можно увидеть в симуляторе iPhone, на iPhone и iPod touch.shouldAutorotateToInterfaceOrientation не работает при первом запуске после установки нового приложения

Итак, мой вопрос: почему ориентационные уведомления будут отличаться для первого запуска приложения, чем для каждого последующего запуска? Я ошибаюсь, полагая, что я не контролирую изменения ориентации, не реагируя на shouldAutorotateToInterfaceOrientation:?

Внутри ViewController в вопросе:

 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{ 
return YES; 
} 

и внутри viewDidLoad и viewDidUnload я получил (соответственно):

 
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
и

 
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; 

Update 6 июля 2010:

По-прежнему не удаётся решить проблему. Я немного отбросил проблему и вернулся к ней, и я все еще вижу проблему в совершенно разных обстоятельствах. Кто угодно?

Update 13 июля 2010:

От компании Apple View Controller Programming Guide:.

»... объект окна делает большую часть работы, связанной с изменением текущей ориентации [...] В частности, он работает с контроллером представления, чей корневой вид был недавно добавлен или представлен в окне. Другими словами, оконный объект работает только с самым внешним контроллером представления, представление которого было отображено ... »

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

У этой вещи было около 175 просмотров во время этого обновления ... никто не имеет даже самого дальнего скрытого предложения? Давай, брось что-то там. Я готов принять любые догадки или предложения на этом этапе. Меня не волнует, глупо ли это или не имеет никакого значения.

+0

Я имел все виды проблем с ориентацией UI, и видел много сообщений, что фиксируется в различных версиях. С какими библиотеками вы связываетесь? Возможно, попробуйте более позднюю библиотеку и посмотрите, лучше ли это. – Andiih

+0

iPhone OS 3.0 и ссылка на http://i996.photobucket.com/albums/af85/jtrim/Screenshot2010-05-17at43542PM.png Я попробую увеличить мою цель сборки и посмотреть, как она идет – jtrim

+0

Вы не необходимо вызвать begin/endGeneratingDeviceOrientationNotifications в контроллере представления. shouldAutorotateToInterfaceOrientation будет вызываться без этого. – progrmr

ответ

2

Никогда не решая эту проблему - я покинул компанию, где я столкнулся с ней, прежде чем у меня появился шанс. Однако к тому моменту, когда я ушел, у меня было довольно хорошее преимущество. Я связался с Apple DTS по поводу проблемы, и они отметили, что для правильной работы авторотации все ViewControllers в стеке просмотра, связанные с авторотацией, должны вызывать супер методы в реализации метода (т. Е. Вызывать [super viewDidLoad] из viewDidLoad ViewController). Я не помню, какие методы они приводили точно, но, вероятно, стоит сделать так, чтобы вы правильно звонили super, где это необходимо.

[EDIT] Если кто-то может подтвердить это, я буду отмечать его как принятый ответ.Благодаря!

0

также убедитесь, что вы установили:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
// Return YES for supported orientations 
return YES;} 

в ALL ViewControllers.m в вашем приложении, а не только один вы работаете (если у вас есть более чем один). Я изо всех сил старался добиться этого для FirstViewController, но он не сработает ни на что. Как только я добавил вышеуказанный код ко всем четырем контроллерам просмотра, он начал работать просто отлично (во всех четырех)

+0

Так что, если у вас есть некоторые контроллеры, которые не должны автоматически вращаться? Это, безусловно, правильный сценарий. – jtrim

+0

Думаю, тогда это не применимо. – TrekOnTV2017

0

У меня была аналогичная проблема - заголовки заголовков UIDevice.h endGeneratingDeviceOrientationNotifications и beginGeneratingDeviceOrientationNotifications как «вложенные». Оказывается, у меня были несбалансированные призывы к этим методам.

Я решил это быстро со следующим изменением к beginGeneratingDeviceOrientationNotifications:

if (![[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications]) 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];