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

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

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

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

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

- (IBAction) screenLock:(id)sender{

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

    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];

}else{

            [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

}

  }

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

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

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

1 Ответ

3 голосов
/ 07 декабря 2010

shouldAutorotateToInterfaceOrientation сглаживает иерархию вашего представления, поэтому ваша логика должна быть включена в делегат вашего приложения (или как самый старший ViewController, который может вернуть YES). Поместите свойство BOOL в ваш appDelegate и установите его с помощью кнопки блокировки (например, указатели цели / делегаты (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
}
...