iPhone应用程序的单阶段与两阶段动画?

时间:2010-01-12 12:15:47

标签: iphone objective-c animation rotation

用于旋转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”一书。

11 个答案:

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

Ed Marty的回答是正确的。如果你没有覆盖任何旋转动画,它会发生的原因可能是你对shouldAutorotate回复“是”..对于某些视图。如果你根本没有实现旋转,那么你应该不要覆盖shouldAutorotate ..方法。如果你覆盖了那个方法,那么只需覆盖单步旋转方法并将其传递给超级方法。

答案 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,这就是它的结束。

我希望它可以帮助别人。我花了一些时间来深究这一点。

干杯,