2010-12-07 1 views
1

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

Для начала у меня есть этот метод:

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

И тогда я думал, что я мог бы справиться с фактической блокировки в способе действия, как это:

- (IBAction) screenLock:(id)sender{ 

if([UIDevice currentDevice].orientation == UIDeviceOrientationPortrait){ 

    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; 

}else{ 

      [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 

} 

    } 

Но увы, код не будет господствовать над первым, который инструктирует вид вращаться ...

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

Мысли? Спасибо!

ответ

3

shouldAutorotateToInterfaceOrientation ряби вверх иерархии вид так нуждается в вашей логике, чтобы ввести в ваше приложение делегата (или, как самый старший ViewController что мощь возвращение YES). Помещенный свойство BOOL в вашем AppDelegate и установить его с помощью вашей кнопки блокировки (например, целевые указатели/delegates (AppDelegate)), то в вашем AppDelegate сделать что-то вроде этого:

#define ROTATION_MASTER_ENABLED 1 

//Setting MASTER_ROTATION_LOCK_ENABLED to 0 will stop the device rotating 
//Landscape UP>landscape DOWN and Portrait UP>Portrait DOWN, 
//This is not generally desired or app store safe, default = 1 

-(BOOL)compareOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 

    UIInterfaceOrientation actual = [[UIDevice currentDevice] orientation]; 
    if(UIInterfaceOrientationIsLandscape(interfaceOrientation) && UIInterfaceOrientationIsLandscape(actual))return YES; 
    else if(UIInterfaceOrientationIsPortrait(interfaceOrientation)&& UIInterfaceOrientationIsPortrait(actual))return YES; 
    else return NO; 

} 


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    if(!MASTER_ROTATION_LOCK_ENABLED)return NO; 
    else if(self.rotationEnabled || [self compareOrientation:interfaceOrientation])return YES; 
    return NO;//self.rotationEnabled is a BOOL 
} 
+1

No. Этот метод должен возвращать YES для поддерживаемых ориентаций - который в вашем случае возвращает либо всегда ДА, либо всегда НЕТ. – Eiko 2010-12-07 16:31:30

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