风景xib显示为肖像

时间:2012-08-28 10:08:11

标签: ios rotation

我有一个视图控制器和用于纵向和横向的单独nib文件。在旋转时,我加载相应的笔尖。方法

 shouldAutorotateToInterfaceOrientation and willRotateToInterfaceOrientation

被调用并且笔尖确实发生了变化。

问题:

the landscape nib does not appear as landscape, but portrait! The status bar is
correctly rotated and appears on the top:
(Sorry, couldn't paste the image, because my account is new. The screenshot is in   
landscape, with a landscape status bar, but a landscape view shown as portrait.)

有人会认为问题在于没有在视图的IB模拟指标中将方向设置为横向,但我已经这样做了,视图在IB中显示为横向。 (如果视图是肖像的话,我认为甚至不可能创建一个旋转按钮。)除了这两个笔尖我还有一个 mainwindow.xib ,其中包含app delegate,window并查看控制器对象。

编辑:我意识到这些观点实际上是在旋转,他们应该“熬夜”。这就像有一个额外的转变。当我将手机向右旋转90°时,风景xib会向右旋转90°。当我将手机向右旋转90°时,纵向xib会上下颠倒显示。状态栏始终正确显示在顶部。

EDIT2:使用

self.view.transform = CGAffineTransformMakeRotation((M_PI * (90) / 180.0));
在willRotateToInterfaceOrientation中的

我可以将视图旋转到横向左侧(以及我想要的任何方向),因此我可以将其用作变通方法。但是,我有其他项目,视图自动旋转,不需要使用CGAffineTransformMakeRotation。这就像防止自动旋转一样。

2 个答案:

答案 0 :(得分:0)

您是否将从nib加载的view添加为subView?如果仅状态栏正在旋转,则表示您的上一个视图已挂起,同时释放视图并添加新视图。您可以告诉您如何将从xib加载的视图添加到SuperView

确保在加载其他视图时正确发布上一个视图,将NSLOG放入dealloc视图中并检查视图是否已完全释放。

答案 1 :(得分:0)

我做了类似于此的事情,而不是分别制作一个nib文件我只是将两个子视图添加到主nib作为prtraitView和Landscape View

并将其切换如下

在viewDidAppear方法

-(void)viewDidAppear:(BOOL)animated{




    if(UIDeviceOrientationIsPortrait(self.interfaceOrientation))
    {
        self.portraitVIew.frame=self.view.bounds;
        self.portraitVIew.frame=self.view.frame;
        [self.view addSubview:self.portraitVIew];
    }else{
        self.landscapeView.frame=self.view.frame;
        [self.view addSubview:self.landscapeView];
    }
    self.view.autoresizesSubviews = YES;




    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(deviceOrientationDidChangeNotification:)
     name:UIDeviceOrientationDidChangeNotification
     object:nil];


}

然后按如下方式实现deviceOrientationDidChangeNotification

- (void)deviceOrientationDidChangeNotification:(NSNotification*)note
{

    if ([[UIDevice currentDevice] userInterfaceIdiom]==UIUserInterfaceIdiomPad) {

    }else{
        UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
        if(UIDeviceOrientationIsLandscape(self.interfaceOrientation))
        {
            self.landscapeView.hidden=NO;
            self.landscapeView.frame=self.view.frame;
            [self.portraitVIew removeFromSuperview];


            [self.view addSubview:self.landscapeView];
        }else {
            self.landscapeView.hidden=YES;
            self.portraitVIew.frame=self.view.frame;
            NSLog(@"Portrait");

            [self.view addSubview:self.portraitVIew];
        }
    }



}

对我来说非常好..