Изменить вид только на одной вкладке в панели вкладок-Приложение (Альбомная-Книжная)?

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

Вопрос

Как я могу изменить вид при повороте iphone (сменить наконечник).Но это должно происходить только на одной вкладке!Я попробовал это с:

    - (void)viewDidLoad {
 LandscapeViewController *viewController = [[LandscapeViewController alloc]
             initWithNibName:@"LandscapeView" bundle:nil];
 self.landscapeViewController = viewController;
 [viewController release];

 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:)
             name:UIDeviceOrientationDidChangeNotification object:nil]; }

- (void)orientationChanged:(NSNotification *)notification
{
    [self performSelector:@selector(updateLandscapeView) withObject:nil afterDelay:0];
}

- (void)updateLandscapeView
{
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView)
 {
        [self presentModalViewController:self.landscapeViewController animated:YES];
        isShowingLandscapeView = YES;
    }
 else if (deviceOrientation == UIDeviceOrientationPortrait && isShowingLandscapeView)
 {
        [self dismissModalViewControllerAnimated:YES];
        isShowingLandscapeView = NO;
    }    
}

Но затем Альбомный режим появляется на всех вкладках.(Когда этот код загружается один раз).Есть какие-нибудь идеи?

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

Решение 3

Танки за ваши комментарии!Я нашел обходной путь:

//Remove Observer if not in Landscape
- (void)viewDidDisappear:(BOOL)animated {
    if (isShowingLandscapeView == NO) {
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
    }   
}

//Add Observer if not in Landscape
- (void)viewDidAppear:(BOOL)animated {
    if (isShowingLandscapeView == NO) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
    }
}

Другие советы

Что происходит, ваш контроллер представления получает UIDeviceOrientationDidChangeNotification уведомление при каждом изменении вращения, независимо от того, отображается оно или нет.Вместо этого попробуйте использовать встроенные методы UIViewController которые предназначены для реагирования на вращения.

http://tinyurl.com/ycb8of2

Это из документов Apple (Посмотреть руководство по программированию контроллера).:

Контроллеры панели вкладок и поворот вида

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

Итак, я не уверен, что контроллер панели вкладок предназначен для поворота только для одного вида.

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