2010-01-12 38 views
16

旋转iPhone窗口的单态和双态动画是什么?适用于iPhone应用程序的单阶段和两阶段动画?

这是“错误”的消息我在调试器控制台(没有崩溃)获得:

Using two-stage rotation animation. To use the smoother single-stage animation, this application must remove two-stage method implementations. 

我是通过这本书的工作“从iPhone发展:探索iPhone SDK”,由Apress出版(戴夫·马克,Jeff LaMarche)参与Swap项目。

回答

15

一切都在UIViewController Class Reference解释。特别检查查看旋转部分靠近顶部。

从参考:

处理视图旋转

默认情况下,仅在纵向模式UIViewController类 显示器意见。 要支持其他方向,您必须覆盖 shouldAutorotateToInterfaceOrientation: 方法,并且您的子类支持的所有方向返回YES。 如果您的 视图的自动调整属性配置正确,那么可能需要执行那个 。但是,UIViewController类提供 附加挂钩,以便您根据需要实现 其他行为。

要暂时关闭不需要的 功能,或者会以其他方式定向 变化时 原因的问题,您可以覆盖 willRotateToInterfaceOrientation:duration: 方法和执行所需的行动 那里。然后,您可以覆盖方法 didRotateFromInterfaceOrientation: 方法,并在方向更改 完成后使用它重新启用这些 功能。

如果要在定位 更改期间执行自定义动画 ,可以使用两种方法之一执行此操作。用于 的方位更改发生在两个步骤中,通知 发生在开始,中间, 和轮换的终点。 但是,在iPhone OS 3.0中,支持被添加为 以执行方向 更改一步。使用一步 方向更改倾向于比旧的两步过程更快 ,并且通常对任何新的 代码推荐使用 。

要添加动画的一步 方向改变,重写 willAnimateRotationToInterfaceOrientation:duration: 方法和执行你的动画 那里。使用旧的两步 方法,覆盖一个或两个 willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration: 方法每个步骤之前配置的动画 。您必须仅选择一种技术并且仅覆盖与该技术相关的 方法。如果您重写与两步 技术关联的方法 ,视图控制器默认使用 该技术。

+2

不幸的是,这并没有帮助。我没有使用任何方向功能,并且此错误仍然发生。似乎是OS4中的一个错误。 – typeoneerror 2010-07-04 19:41:51

+0

这个答案在某些情况下是正确的,但不是其他情况。当然,文档中的这一部分并没有完全解释错误 - Apple的UIImagePickerController/presentModalController中存在触发此错误消息(以及不应触发它)的特定错误。仍然试图找到一个解决方法:(。 – Adam 2011-02-20 16:28:12

+0

@亚当:http://stackoverflow.com/questions/2878947/getting-using-two-stage-rotation-animation-warning-with-uiimagepickercontroller – geon 2011-04-13 09:08:05

3

我从willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:方法更改为willAnimateRotationToInterfaceOrientation:duration:方法和警告消失。

谢谢。

1

埃德马蒂的回答是正确的。如果你不覆盖任何旋转动画,它会发生的原因可能是你回答“YES”to shouldAutorotate ..对于某些观点。如果你根本没有实现旋转,那么你应该不要重写shouldAutorotate ..方法。如果您确实重写了该方法,那么只需重写单步旋转方法并将其传递给超级方法即可。

3

我已经找到了罪魁祸首在我的情况是的UIImagePickerController(我还没有覆盖任何旋转动画):

[自我presentModalViewController:imagePicker动画:是];

用通用的UIViewController替换imagePicker不会产生任何警告。

+0

我有同样的问题UIImagePickerController有没有其他方法可以在不改变UIViewController的情况下删除错误? – karim 2010-10-21 10:26:56

+1

您是如何使用UIViewController指定UIImagePickerController的参数的? – Joze 2011-02-23 15:32:44

1

如果您使用的是iOS 4,并且您收到此警告,我找到了一种摆脱它的方法。在您的info.plist中,有一个名为“支持的界面方向”的项目。选择你的应用程序支持的方向,并且在启动imagePicker时两级警告将消失。

1

@plumiscles答案不适合我 - 没有项目称为“支持的接口方向”,可能是B/C它是一个旧项目。但是你可以通过直接编辑的.plist文件并添加得到同样的效果这一点:

<key>UIInterfaceOrientation</key> 
    <string>UIInterfaceOrientationPortrait</string> 
0

我没有骑过任何的那些两步的功能,但我打电话给我自己的函数时,我收到orientationChanged通知,我有这行代码在里面。评论它摆脱了警告,并允许自动旋转正常工作。自动旋转仍然可以用这行代码工作,直到iOS 4.2,然后完全崩溃。花费了大量的时间寻找为什么内置的autoRotate在4.2中停止工作。也许这会帮助别人。

注释掉此行,以使其工作:
[[UIApplication sharedApplication] setStatusBarOrientation:currentOrientation animated:YES];

1

需要补充UIImagePickerController作为一个子视图来解决这个错误

[self.view addSubview:picker.view]; 
[self presentModalViewController:picker animated:NO]; 
0

我从plist中“支持的接口方向”删除行并警告消失。

0

我刚刚有同样的问题。在我看来,这是一个愚蠢的错误,我只是为了防止其他人陷入同样的​​问题。

在我的选项卡式应用程序中,我删除了一个原始ViewControllers并添加了一个新的Storyboard来创建“设置”部分。

这个新的VC必须是一个表格视图VC,甚至我设计,编译和运行它没有问题,当我改变了应用程序的方向,我一直得到这个“使用两阶段旋转动画”错误。

我的问题是,我忘了改变原来的.h文件接口“UIViewController”为“UITableViewController”。

完成此操作后,我将故事板身份徽章上的类从常规值更改为我的SettingsViewController,这就是它的结尾。

我希望它可以帮助别人。我花了一段时间才弄清楚了这一点。

干杯,

1

我里面(无标签)没有视图控制器创建tabbarcontroller后出现这个问题,此警告消失,一旦我连接上至少一个视图控制器它。