Вращение с разными макетами - iOS 4 - PullRequest
2 голосов
/ 29 апреля 2011

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

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

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

Portrait xib Landscape xib

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

Я добавил альбомный вид в ViewController, имея оба вида в контроллере вида.Я связал его с владельцем файла в UIView * landscapeView, который я добавил в раздел @interface ViewController.Я добавил [self.view 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;
    }
}

Однако это не правильное решение.Когда я запускаю симулятор и поворачиваю его, экран неправильно помещается.

Bad Image

1 Ответ

1 голос
/ 29 апреля 2011

Все вещи (значения переменных вашего экземпляра) остаются неизменными, когда устройство меняет ориентацию. Если у вас есть только один viewController, и вы показываете обе ориентации в одном и том же, то вы можете легко управлять этим. Я предлагаю вам создать два UIViews в файле nib таким образом, чтобы вы могли делать все, что вы хотите. Надеюсь, вы понимаете, о чем я говорю. Дайте мне знать, если вам нужна помощь.

Вот модифицированный код

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if (orientationLock)
    return NO;
else {
    if (interfaceOrientation == UIInterfaceOrientationPortrait) {
        [landscapeView setHidden:YES];

    } else {

        [landscapeView setHidden:NO];
    }
    return YES;
}
}
...