iPhone旋转困境

时间:2010-04-20 14:42:02

标签: iphone objective-c rotation

我花了很多令人沮丧的时间试图在Tunepal的iPhone版本上进行轮换。

首先,我有一个标签栏控制器,导航控制器控制每个视图。

我实际上只希望我的一个视图能够旋转,那就是TuneDisplay

我有一个UITabBarController子类,并覆盖了shouldAutorotateToInterfaceOrientation:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
    if (self.selectedViewController != nil)
    {
        return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
    }
    else
    {
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }
}

在每个选项卡的每个视图控制器中,我已覆盖该方法,并为我想要支持的每个方向返回YES。一切都很好,一切都按照应有的方式运作。如果我尝试在不支持旋转的选项卡上进行旋转,则不会发生任何事情。

如果我从旋转的选项卡移动到不应该支持该旋转的选项卡,则会出现问题。新选项卡也会旋转显示!所有这些的屏幕截图包括在这里:

http://tunepal.wordpress.com/2010/04/20/rotation-woes/

有什么方法可以让我在点击标签时旋转回纵向?

我尝试了不受支持的setOrientation技巧,但首先它无法正常工作,其次我收到Apple的警告,要求将其包含在我的上一次构建中。

如果(我怀疑)没有办法限制这种行为:

旋转设备时如何缩放麦克风图像?

如何使按钮和进度条展开以适合工具栏的位置?

此外,其中一个旋转好的标签有一个表格和一个搜索栏。我第一次向右或向左旋转时,我在搜索栏的右侧有一个黑条。如果我随后旋转并再次旋转,则条形消失!我已经在界面构建器的搜索栏上启用了struts和spring事件,看起来它应该正常运行。

有关如何解决此问题的任何想法?

想法,反馈非常赞赏

布赖恩

2 个答案:

答案 0 :(得分:1)

这不是一个完整的答案。轮换严重不一致。你做了正确的事。有些方面在模拟器中不起作用,因此您需要在设备上确认所有测试。在旧操作系统版本中,表格标题和搜索栏不会调整为全宽,因此请坚持使用3.1.3或更高版本。

最常见的问题:

  1. 实施shouldAutorotateToInterfaceOrientation:以返回YES;
  2. 如果您使用导航控制器,则根视图控制器必须支持方向;
  3. 如果您有工具栏,则所有项目的视图控制器都必须支持它;
  4. 和标签栏控制器相同。
  5. 您可能需要打开方向通知,才能从设备中获取更多有用的信息:

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self 
        selector:@selector(orientationChanged:) 
        name:UIDeviceOrientationDidChangeNotification object:nil];
    

    请记住将其关闭,并在完成后将其从通知中删除;这应该是一个很高的开销。

    设置要调整图片大小的视图contentMode属性;与你在IB中设置的autoresizingMask一起,你应该没问题。

    还要记住,您可以使用两个不同的笔尖进行纵向和横向模式。有一个示例项目可以做到这一点(“WhichWayIsUp”);另请参阅“View Controller编程指南”(“创建备用横向界面”)。

    如果正在调用旋转方法,则应该一致地旋转UI。你会发现它们并不总是被称为。

    在视图上调用旋转变换以强制旋转并不困难。它不应该被需要,但有时这是它们旋转的唯一方式。

    view.transform = CGAffineTransformMakeRotation(M_PI * n);
    

    如果你明白了,请告诉我们。

答案 1 :(得分:0)

听起来您正在显示选项卡时正确处理旋转。但是,如您所知,没有快速切换旋转的方法。您需要做的是使用CGAffineTransform自行旋转视图。请参阅此问题:Is there a documented way to set the iPhone orientation?

要缩放图像,您应该能够在界面生成器中单击容纳图像的UIImageView内的箭头。在右上角有一个小箭头,您可以单击以查看视图在旋转时的行为,以确保其正确缩放。但是你可能最好不要缩放图像并像在链接问题的答案中那样进行旋转。