iPad / iPhone定位问题

时间:2012-04-16 17:41:21

标签: objective-c ios interface-builder orientation xcode4.3

我意识到有很多关于这个问题的问题,但是我没有找到解决我问题的问题。

首先,我在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中的风景视图 enter image description here

更改方向后,我在iOS模拟器中的横向视图 enter image description here

我在这里做错了什么?我无法弄清楚,任何帮助将不胜感激。先感谢您。 **编辑:下面的新代码** 好吧..我的问题是视图在景观中正确加载,它只是侧面。因此,横向视图会加载横向视图。我修改后的基于@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;
    }
}

5 个答案:

答案 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)

您能否确定,您已按如下方式选择了所有方向支持。我试过这个,似乎对我来说很好。

enter image description here

答案 3 :(得分:1)

<强>观!!!

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

要检查一下:

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

如果您的视图显示您想要代表您的landscapeView的视图的“肖像”,则可能是xcode将您的横向视图旋转为纵向并且弄乱您的演示文稿。

如果这有帮助,请告诉我。

答案 4 :(得分: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);
              }
         }
     } 
    
  5. 抱歉,我无法完全解释答案,我不完全了解项目中包含的影响方向的所有内容。我还是iOS开发的新手。