2009-09-26 3 views
0

Я хочу, чтобы реализовать свой собственный путь autorotating интерфейса: Код:Пользовательские авторотации iPhone SDK

// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
NSLog(@"should!"); 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.4]; 
if (interfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
    trash.transform = CGAffineTransformMakeRotation(M_PI*0.5); 
} 
else if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) { 
    trash.transform = CGAffineTransformMakeRotation(-M_PI*0.5); 
} 
else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { 
    trash.transform = CGAffineTransformIdentity;//CGAffineTransformMakeRotation(M_PI); 
} 
else { 
    trash.transform = CGAffineTransformIdentity; 

} 
[UIView commitAnimations]; 
return NO; 
} 

Как вы видите, что я имею в UIView (на самом деле UIImageView) - мусор, и я его вращения используя CGAffineTransformMakeRotation при изменении ориентации интерфейса. Он отлично работает, за исключением того, что метод никогда не вызывается, когда ориентация интерфейса является портфолио по умолчанию (сверху вниз работает). Таким образом, мусор поворачивается к предыдущей ориентации, а не по умолчанию. Я немного беспокоюсь о комментарии над методом (автоматически добавляется при создании UIViewController), который говорит «разрешить ориентацию, отличную от ориентации по умолчанию».

Когда я возвращаю YES вместо NO, конечно, метод вызывается для каждой ориентации, но я не хочу анимировать весь интерфейс, а только некоторые элементы.

Справка Plz.

ответ

2

-shouldAutorotateToInterfaceOrientation: не предназначен для вас, чтобы что-либо делать, кроме как возвращать ДА или НЕТ. Не говорите, что iPhone был повернут или будет повернут. Вопрос о том, будет ли он иметь ориентацию, отличную от текущей, требуется задать вашему viewController.

Если у вас нет контроллера или подкласса вида, вам не понадобится этот вызов. В любом случае, вы возвращаете ДА или НЕТ и оставляете это на этом.

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

(как правило, считают контроллеры делают вам одолжение и сделать поворот для вас, и shouldAutorotateToInterfaceOrientation - это просто ваше одобрение. Если вы работаете без контроллеров просмотра или хотите сами повернуть некоторые элементы, то вы просто найдете подходящий момент в своем коде для вращения ...)

0

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

1

Если вы просто хотите узнать текущую ориентацию устройства (, который может отличаться от вращения UI!), используйте beginGeneratingDeviceOrientationNotifications и orientation методы .

Если вы хотите изменить интерфейс, когда он вращается, используйте didRotateFromInterfaceOrientation в UIViewController.

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