Изменить вид только на одной вкладке в Tabbar-Application (Landscape-Portrait)? - PullRequest
0 голосов
/ 08 февраля 2010

Как я могу изменить вид при вращении 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 ]

0 голосов
/ 12 февраля 2010

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

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

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

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

0 голосов
/ 12 февраля 2010

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

//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];
    }
}
0 голосов
/ 08 февраля 2010

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

http://tinyurl.com/ycb8of2

...