0

我意识到有很多与此问题有关的问题,但是我还没有找到一个可以解决我的问题的问题。

首先,我在 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;
    }
}
4

5 回答 5

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;
}
于 2012-04-16T18:42:04.420 回答
1

你最好简单地使用

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
 if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
    {
        self.view = self.landscapeView;
    }
    else 
    {
        self.view = self.portraitView;
    }
}

处理旋转而不是创建自己的旋转。
现在您可以删除所有通知内容。

于 2012-04-16T18:19:28.487 回答
1

你能确定,你选择了所有的方向支持,如下所示。我试过这个,它似乎对我来说工作得很好。

在此处输入图像描述

于 2012-04-16T18:19:49.780 回答
1

主意!!!

如果您在界面构建器中设置视图,然后切换视图旋转时显示的实际视图,那么您需要在该特定方向构建该视图,而不仅仅是调整其大小以适应方向。

要检查这一点:

  • 在 Interface Builder 中打开您的 .xib。
  • 单击对象下的“视图”,以便选择整个视图。
  • 查看 IB 右侧的“模拟指标”下方。确保在“方向”下拉菜单中选择“横向”。

如果您的视图对要表示您的 LandscapeView 的视图显示“纵向”,那么可能是 xcode 正在将您的横向视图旋转为纵向并弄乱您的演示文稿。

让我知道这是否有帮助。

于 2012-04-16T20:09:17.670 回答
0

嘿,谢谢大家的帮助。我有一个朋友的帮助,我不完全确定问题所在。我可以告诉你我知道他做过的事情。

  1. 暂时禁用我们的广告

  2. 完全删除了第二个视图并使用原生方向和调整大小

  3. 将此添加到几乎每个 .m 文件中。

    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {    
    return YES;
    

    }

  4. 以及以编程方式更改了与此类似的其他一些视图

    -(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 开发还是很陌生。

于 2012-04-28T14:07:10.987 回答