Как я могу сделать пользовательское действие блокировки ориентации?
Я хотел бы сделать настраиваемую кнопку блокировки ориентации для моего приложения для чтения, и я подумал, что это будет не так уж плохо, чтобы взбить, но, увы, меня взбивают.
Для начала у меня есть этот метод:
- (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 ответ
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
}