Вращение с разными раскладками-iOS 4


Ниже приведены два макета, которые я хочу иметь в своем приложении. Было бы неплохо, если бы при переключении приложения с портрета на ландшафт он сохранял UILabels, BOOLs и другие объекты. Поскольку кнопки расположены по-разному, я не могу просто настроить автоповорот портретного вида на автоповорот. Я также хочу реализовать свою собственную блокировку вращения с помощью BOOL и кнопки в правом верхнем углу.

Я думал об использовании -(void)orientationChanged: (NSNotification ) уведомление с помощью presentModalViewController , однако они не копировали объекты и, казалось, причиняли больше вреда, чем пользы, и, казалось, не работали должным образом .

Спасибо за помощь!

Портрет xibПейзаж xib

Попытки Решения:

Я добавил ландшафтный вид в 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 2

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;
}
}