时间:2011-02-08 20:37:15

标签: iphone orientation device

我的应用程序是基于导航的。

除报告模式外,所有视图均显示纵向模式。设备旋转横向时,显示横向模式。

如果设备正在旋转横向模式报告视图正在显示横向模式。如果横向模式再次在设备纵向模式下旋转它将显示当前视图的正常视图。

当前动作的流程我的视图显示。 从当前视图是纵向模式,我在横向模式下旋转设备,因此获得报告模式的横向模式。两次旋转后,我在纵向模式下获取当前视图。我需要减少牵引力。请指导我。如果再次旋转,如何检查报告横向模式的条件我需要在纵向模式下显示当前视图。

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 :(得分:0)

我不确定我理解你的问题,但代码看起来可能有逻辑颠倒了。  在ReportViewController中,

- (BOOL)shouldAutorotateToInterfaceOrientation
在旋转之前调用

,所以它应该     为肖像返回YES(是,允许视图从横向旋转到肖像) 并为风景返回NO(否,不允许视图旋转到横向风景)。

同样在CurrentVC中 - 尝试

return (interfaceOriention==UIInterfaceOrientationLandscape);

希望有所帮助。 -Mike