Вращение с разными раскладками-iOS 4
Ниже приведены два макета, которые я хочу иметь в своем приложении. Было бы неплохо, если бы при переключении приложения с портрета на ландшафт он сохранял UILabels, BOOLs и другие объекты. Поскольку кнопки расположены по-разному, я не могу просто настроить автоповорот портретного вида на автоповорот. Я также хочу реализовать свою собственную блокировку вращения с помощью BOOL и кнопки в правом верхнем углу.
Я думал об использовании -(void)orientationChanged: (NSNotification ) уведомление с помощью presentModalViewController , однако они не копировали объекты и, казалось, причиняли больше вреда, чем пользы, и, казалось, не работали должным образом .
Спасибо за помощь!
Попытки Решения:
Я добавил ландшафтный вид в ViewController, имея оба вида в контроллере вида. Я связал его с владельцем файла под UIView * landscapeView, который я добавил в разделе @ interface из ViewController. Я добавил [себя.вид addSubview: landscapeView] к методу viewDidLoad. Затем я добавил этот фрагмент кода:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if (orientationLock)
return NO;
else {
if (interfaceOrientation == UIInterfaceOrientationPortrait) {
[landscapeView setHidden:YES];
//[self.view setHidden:NO]; removed
} else {
//[self.view setHidden:YES]; removed
[landscapeView setHidden:NO];
}
return YES;
}
}
Однако это не является правильным решением. Когда я запускаю симулятор и поворачиваю его, экран не помещается должным образом.
1 ответ:
Все вещи (значения переменных вашего экземпляра) остаются неизменными, когда устройство меняет ориентацию. Если у вас есть только один viewController, и вы показываете оба oreeantation в одном и том же, то вы можете легко управлять этим. Я предлагаю вам создать два UIView в файле nib, чтобы вы могли делать все, что хотите.Надеюсь, вы понимаете, о чем я говорю.Дай мне знать, если тебе понадобится помощь.
Здесь модифицированный код
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { if (orientationLock) return NO; else { if (interfaceOrientation == UIInterfaceOrientationPortrait) { [landscapeView setHidden:YES]; } else { [landscapeView setHidden:NO]; } return YES; } }