用于旋转iPhone窗口的单状态和两阶段动画是什么?
这是我在调试器控制台中收到的“错误”消息(没有崩溃):
Using two-stage rotation animation. To use the smoother single-stage animation, this application must remove two-stage method implementations.
我正在研究交换项目中由Apress(Dave Mark,Jeff LaMarche)撰写的“开始iPhone开发:探索iPhone SDK”一书。
答案 0 :(得分:15)
UIViewController Class Reference中解释了所有内容。特别请查看顶部附近的查看轮播部分。
参考文献:
处理视图轮播
默认情况下,UIViewController类 仅以纵向模式显示视图。 为了支持其他方向, 你必须覆盖
shouldAutorotateToInterfaceOrientation:
方法并返回YES表示任何 您的子类支持的方向。 如果您的自动调整属性 视图配置正确,即 可能就是你要做的一切。然而, UIViewController类提供 额外的钩子供您实施 根据需要采取其他行为。暂时关闭功能 不需要或不可能 在定位期间导致问题 改变,你可以覆盖
willRotateToInterfaceOrientation:duration:
方法并执行所需的操作 那里。然后你可以覆盖didRotateFromInterfaceOrientation:
方法并用它来重新启用它们 一旦方向改变就会出现 已经完成了。如果要执行自定义 定向期间的动画 改变,你可以用两个中的一个来做 方法。方向改变过去常常 通过两个步骤进行通知 发生在开头,中间, 和旋转的终点。 但是,在iPhone OS 3.0中,支持是 添加了执行方向 一步改变。使用一步 方向变化往往更快 而不是旧的两步过程 通常建议任何新的 代码。
为一步添加动画 方向改变,覆盖
willAnimateRotationToInterfaceOrientation:duration:
方法并执行您的动画 那里。要使用较旧的两步 方法,覆盖其中一个或两个willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
和willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:
配置动画的方法 在每一步之前。你必须只选择 一种技术,只是覆盖 与之相关的方法 技术。如果你覆盖任何一个 与两步相关的方法 技术,视图控制器使用 默认情况下该技术。
答案 1 :(得分:3)
我从willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
方法改为willAnimateRotationToInterfaceOrientation:duration:
方法并且警告消失了。
感谢。
答案 2 :(得分:3)
我发现我的案例中的罪魁祸首是UIImagePickerController(我也不会覆盖任何旋转动画):
[self presentModalViewController:imagePicker animated:YES];
使用通用UIViewController替换imagePicker不会生成任何警告。
答案 3 :(得分:1)
答案 4 :(得分:1)
如果您正在使用iOS 4并且您收到此警告,我找到了摆脱它的方法。在info.plist中,有一个名为“支持的界面方向”的项目。选择应用程序支持的方向,并在启动imagePicker时消除两阶段警告。
答案 5 :(得分:1)
@plumiscles的答案对我来说并不适用 - 没有名为'支持接口方向'的项目,可能是b / c它是一个旧项目。但是你可以通过直接编辑.plist文件并添加它来获得相同的效果:
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationPortrait</string>
答案 6 :(得分:1)
需要添加UIImagePickerController
作为子视图来解决此错误
[self.view addSubview:picker.view];
[self presentModalViewController:picker animated:NO];
答案 7 :(得分:1)
创建一个内部没有视图控制器的tabbarcontroller(没有选项卡)之后我遇到了这个问题,一旦我连接了至少一个视图控制器,这个警告就消失了。
答案 8 :(得分:0)
我没有超过任何这两个步骤的功能,但是当我收到orientationChanged
通知时,我正在调用自己的函数,并且我有这行代码。评论它消除了警告并允许自动旋转正常工作。自动旋转仍然使用这行代码直到iOS 4.2,然后它完全破坏。花了很多时间寻找为什么内置的autoRotate在4.2中停止工作。也许这会帮助别人。
注释掉这一行以使其有效:
[[UIApplication sharedApplication] setStatusBarOrientation:currentOrientation animated:YES];
答案 9 :(得分:0)
我从plist中删除了“支持的界面方向”行,警告消失了。
答案 10 :(得分:0)
我遇到了同样的问题。在我的情况下是一个愚蠢的错误,我正在这里,以防万一其他人陷入同样的问题。
在我的标签应用程序中,我删除了一个原始的ViewControllers并添加了一个新的Storyboard来创建一个“设置”部分。
这个新的VC必须是一个表视图VC,甚至我设计,编译和运行它没有问题,当我改变应用程序的方向时,我不断得到这个“使用两阶段旋转动画”错误。
我的问题是我忘了更改原来的.h文件界面“UIViewController”中的“UITableViewController”。
完成此操作后,我将Storyboard标识徽章从一般值更改为我的SettingsViewController,这就是它的结束。
我希望它可以帮助别人。我花了一些时间来深究这一点。
干杯,