我有一个视图控制器和用于纵向和横向的单独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。这就像防止自动旋转一样。
答案 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];
}
}
}
对我来说非常好..