проблема ориентации устройства iPhone - PullRequest
0 голосов
/ 08 февраля 2011

Мое приложение основано на навигации.

Все режимы отображения отображаются в портретном режиме, кроме режима отчета. Режим отчета отображает альбомный режим, когда устройство поворачивается в альбомной ориентации.

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

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

Here at ReportViewController 


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{

    return UIInterfaceOrientationIsLandscape(interfaceOrientation);

}

@interface CurrentViewController

BOOL isShowingLandscapeView;
Report *landscapeViewController;

@implementation CurrentViewController 


- (void)viewDidLoad 
{
    [super viewDidLoad];

    Report *viewController = [[Report alloc]initWithNibName:@"Report" 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 == UIInterfaceOrientationPortrait && isShowingLandscapeView)
    {
        [self dismissModalViewControllerAnimated:YES];
        isShowingLandscapeView = NO;
    }    
}



- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
   return (interfaceOrientation == UIInterfaceOrientationPortrait ); // support only portrait

}

1 Ответ

0 голосов
/ 09 февраля 2011

Я не уверен, что понимаю ваш вопрос, но код выглядит так, как будто его логика изменилась.В ReportViewController

- (BOOL)shouldAutorotateToInterfaceOrientation

вызывается до поворота, поэтому он должен вернуть YES для Портрета (YES, разрешить повороту вида из Пейзажа в портрет) и вернуть NO для Пейзажа (NO, не разрешатьвид для поворота в Пейзаж из Пейзажа).

И аналогично в CurrentVC - попробуйте

return (interfaceOriention==UIInterfaceOrientationLandscape);

Надеюсь, что это поможет.-Mike

...