我意识到有很多关于这个问题的问题,但是我没有找到解决我问题的问题。
首先,我在menu.h中设置了这段代码。
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES; }
状态栏随方向而变化,但视图未旋转或调整大小。为了尝试缩小我的问题范围,我决定尝试根据方向在一个.xib中切换两个视图
- (void)viewDidLoad {
[super viewDidLoad];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
}
-(void) orientationChanged:(NSNotification *)object
{
UIDeviceOrientation deviceOrientation = [[object object] orientation];
if (deviceOrientation == UIDeviceOrientationLandscapeLeft || deviceOrientation == UIDeviceOrientationLandscapeRight)
{
self.view = self.landscapeView;
}
else
{
self.view = self.portraitView;
}
}
在iOS模拟器中,视图肯定会更改为特定视图。然而,景观视图显示为纵向和侧面。
我在IB中的风景视图
更改方向后,我在iOS模拟器中的横向视图
我在这里做错了什么?我无法弄清楚,任何帮助将不胜感激。先感谢您。 **编辑:下面的新代码** 好吧..我的问题是视图在景观中正确加载,它只是侧面。因此,横向视图会加载横向视图。我修改后的基于@Seega的代码是:
- (void)viewDidLoad {
[super viewDidLoad];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
[[TTNavigator navigator] setCustomTarget:self];
[[TTNavigator navigator] setCustomAction:@selector(photoAction)];
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if (toInterfaceOrientation == UIDeviceOrientationLandscapeLeft || toInterfaceOrientation == UIDeviceOrientationLandscapeRight)
{
self.view = self.landscapeView;
}
else
{
self.view = self.portraitView;
}
}
-(void) orientationChanged:(NSNotification *)object
{
UIDeviceOrientation deviceOrientation = [[object object] orientation];
if (deviceOrientation == UIDeviceOrientationLandscapeLeft || deviceOrientation == UIDeviceOrientationLandscapeRight)
{
self.view = self.landscapeView;
}
else
{
self.view = self.portraitView;
}
}
答案 0 :(得分:4)
我建议您将代码放入:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
而不是制作新方法。如果shouldAutorotateToInterfaceOrientation方法为该旋转返回YES,则会自动调用此方法。
UIDeviceOrientation和UIInterfaceOrientation之间也存在差异,因此请确保引用正确的引用。您现有的代码将更改为以下内容:
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
self.view = self.landscapeView;
}
else
{
self.view = self.portraitView;
}
此外,您还可以使用宏来检查界面方向,从而保持代码清洁。
if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation))
{
self.view = self.landscapeView;
}
else
{
self.view = self.portraitView;
}
答案 1 :(得分:1)
你最好简单地使用
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
self.view = self.landscapeView;
}
else
{
self.view = self.portraitView;
}
}
处理旋转而不是创建自己的旋转 现在您可以删除所有通知内容。
答案 2 :(得分:1)
您能否确定,您已按如下方式选择了所有方向支持。我试过这个,似乎对我来说很好。
答案 3 :(得分:1)
<强>观!!! 强>
如果要在界面构建器中设置视图,然后切换视图旋转时显示的实际视图,则需要在该特定方向上构建该视图,而不仅仅是根据方向调整其大小。
要检查一下:
如果您的视图显示您想要代表您的landscapeView的视图的“肖像”,则可能是xcode将您的横向视图旋转为纵向并且弄乱您的演示文稿。
如果这有帮助,请告诉我。
答案 4 :(得分:0)
暂时停用我们的广告
完全删除了第二个视图,然后使用原生方向并调整大小
将此添加到几乎每个.m文件中。
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
同样以编程方式更改了与此
类似的其他几个视图-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (interfaceOrientation == UIDeviceOrientationLandscapeLeft || interfaceOrientation == UIDeviceOrientationLandscapeRight)
{
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone)
{
self.Button.frame = CGRectMake(27,96,86,86);
self.Label.frame = CGRectMake(27,162,86,21);
}
else
{
self.Button.frame = CGRectMake(18,100,86,86);
self.Label.frame = CGRectMake(18,164,86,21);
}
}
}
抱歉,我无法完全解释答案,我不完全了解项目中包含的影响方向的所有内容。我还是iOS开发的新手。