Уитаббантроллер с ViewControllers с использованием различных ориентаций?

StackOverflow https://stackoverflow.com/questions/3009206

Вопрос

Я вижу, что это то, что беспокоит много людей: /

У меня есть UitabbarController, который имеет 4 ViewControllers, весь тип UinavigatingController. Одним из навигационно-компоновщиков получает ViewController на его стек, этот ViewController должен быть представлен в ландшафтном режиме / ориентации.

ViewController - это график, это абсолютно только место в приложении, где имеет смысл ландшафта. (Я прячую Uitabbar, когда это представлено не ведут пользователю верить, что это будет работать везде)

Чтобы сделать UITABBABONTROLLER правильно реагировать на изменения в ориентации, все его контрольные контроли должны возвращать одинаковое значение из метода делегата:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

Итак, для размещения этого поведения я реализовал этот метод во всех просмотрах контролеров, принадлежащих к UitabbarController:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    BOOL canRotate = [defaults boolForKey:@"can_rotate"];

    return canRotate;
}

«Хитрость» теперь, когда, когда мой скандинавский ViewController продвигается, я делаю это:

- (void) viewWillAppear:(BOOL)animated {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:YES forKey:@"can_rotate"];
    [defaults synchronize];

}

И когда он выскочил, я делаю это:

- (void) viewWillDisappear:(BOOL)animated {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:NO forKey:@"can_rotate"];
    [defaults synchronize];

}

Это работает очень хорошо. Когда ViewController находится в стеке, я могу повернуть устройство, а представление следует.

Проблема, однако, что, если пользователь нажал кнопку «Назад» на навигационномБаре, в то время как в ландшафте в режиме ландшафта, появившись, что высказывает ViewController к предыдущему ViewController, этот «старый» ViewController, конечно, также в ландшафтном режиме. Чтобы сделать все хуже, потому что я устанавливаю Bool на нет, этот «старый» ViewController не может вращаться назад, когда я ориентирую устройство в портрет.

Есть ли способ обновить все так, чтобы ни один из моих других контрольных контролеров не будет в ландшафтном режиме, когда я попрой режим Can-In-Laxtive ViewController?

Я немного волнулся, что если бы это можно было сделать из ландшафта к портрету, это также должно быть возможно от портрета на пейзаж, что делает моим «взломом» ненужным .. Но если это не может, то я вернулся к квадратному: /

Надеюсь, я близок и что кто-то мог помочь мне добраться туда, спасибо :)

Это было полезно?

Решение

Я думаю, что могу упростить все это ....

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

- (Void) ViewDiDiDiDAppear: (Bool) Анимированные {[uiview reganimations: @ "Просмотр Flip" Контекст: nil]; [UIVIEW SetAnimationduration: 0.5f]; [UIVIEW SetAnimationCurve: UiviewanimationCurveSeaseinout];

    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(90.0*0.0174532925);
    self.view.bounds = CGRectMake(0.0f, 0.0f, 480.0f, 320.0f);
    self.view.center = CGPointMake(160.0f, 240.0f);

// [ShareDation Uiadicationation] .statusbarorrientation = uiinterfaceorientationlandscaperight;

[UIView commitAnimations];
[super viewDidAppear:animated];

}

Ничего не вращается, но вы тогда вручную вращаете вид, который вы хотите переместить. Если вам не нужна поддержка клавиатуры в представлении, вам не нужно менять статус значению.

Если вы не всегда хотите, чтобы этот взгляд вращался, у вас есть немного сложнее - вы можете проверить значения акселерометра, чтобы выяснить, каким способом подключен телефон (или может быть возможно, чтобы подразумевать, какой способ повернуть телефон Призывами к необходимости, а затем просто вызовите код преобразования как и когда вам нужно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top