2011-02-02 5 views
0

Я хочу, чтобы мгновенное вращение экрана было ориентировано на него. В моем ViewController есть один UIImage и один UILabel. Я делаю так:iPhone: экран вращается, а затем сбой приложения

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 
[self willRotateToInterfaceOrientation:[self interfaceOrientation] duration:0]; 
} 

Без приложения линии не откажет:

[self willRotateToInterfaceOrientation:[self interfaceOrientation] duration:0]; 

С линией кода пытается установить продолжительность до нуля приложение аварий сразу после отделки вращения.

Любая идея, что я делаю неправильно?

спасибо.

ответ

1

Вы укладываете много символов willRotateToInterfaceOrientation: duration: вызывает один за другим. Infact в первый раз вызывается метод, он будет называть его снова, и снова, и снова, ... до сбоя. Время звучания: 0 ничего не значит, infact. Время синхронизации CoreAnimation, используемое для эффекта вращения, запускается в отдельном потоке, чем Run Loop, поэтому вы не можете остановить укладку вызовов таким образом. Причина, по которой приложение падает после ротации, возможно, связано с тем, что, когда стек заполняется, анимация уже запущена (отдельный поток).

Вы можете получить мгновенную ориентацию, просто отключив авторотацию и наблюдая за уведомлением UIDeviceOrientationDidChangeNotification, а затем примените соответствующее преобразование вида.

+0

Это действительно работает. Благодаря! – TxabiGG

1

Вы создаете бесконечный цикл:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 
    [self willRotateToInterfaceOrientation:[self interfaceOrientation] duration:0]; 
    } 

Вы называете ту же функцию внутри себя. Что вы делаете?

+0

Я пытаюсь избежать анимации, когда экран повернут. Поэтому я пытаюсь установить длительность в 0. Но поскольку вы указали, что это бесконечный цикл, есть ли способ, которым вызывается метод willRotateToInterfaceOrientation с длительностью = 0? – TxabiGG

Смежные вопросы