【问题标题】:AS3 iOS prevent "animated" orientation changeAS3 iOS 防止“动画”方向改变
【发布时间】:2011-11-10 13:16:28
【问题描述】:

我正在使用 Flash CS5.5 开发 iOS 应用程序。我想让 ipad/iphone 停止为orientationChange 设置动画并直接更改它,这可能吗?

我认为这是一个解决方案,但它没有帮助 AS3 - iOS force landscape mode only?

【问题讨论】:

  • 强制横向模式将强制应用仅在横向运行,即使您旋转设备,方向也不会改变
  • 为什么要阻止动画?

标签: ios actionscript-3 ipad actionscript orientation-changes


【解决方案1】:

如果您尝试设置Stage.autoOrients = false;flash.events.StageOrientationEvent.ORIENTATION_CHANGE 将永远不会触发。这有助于完全禁用方向更改,但对您的问题没有帮助。虽然我自己没有尝试过,但您也许可以收听该事件:

flash.events.StageOrientationEvent.ORIENTATION_CHANGING

您可以在该侦听器中调用event.preventDefault() 来阻止实际旋转的发生。然后可以自己手动设置:

Stage.setOrientation(StageOrientation.ROTATED_RIGHT);

【讨论】:

  • 非常感谢您的回答,并为我迟到了(我的闪光灯发疯了)感到抱歉。我以前试过这个,知道我再次做了同样的结果......没有找到任何其他解决方案,所以我将不得不以无聊的方式去做,把它全部放在一个容器中并自己处理一切......
  • @EricJacobsson 那么,您并没有提到您已经尝试过“无聊的方式”,而 JamesTomasino 正确回答了您的问题。另外,您在问题中没有提到您还需要与事件侦听器一起玩,也许他可以添加一些 cmets 来增加趣味。
【解决方案2】:

您是否尝试过 SO 答案:Disable orienation change rotation animation

在您的 flash CS5.5 或 air 3.5 的主视图控制器中,该答案的代码是:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    [UIView setAnimationsEnabled:YES];
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    [UIView setAnimationsEnabled:NO];

    return TRUE;  /* Your original orientation booleans, in case you prevent one of the orientations */
}

该代码使用了可以被覆盖的原生 iOS UIViewController 函数。你必须有一个覆盖UIViewController的原生iOS目标C类,然后你可以插入上面的代码。作为视图控制器生命周期的一部分,当设备旋转到这些时会进行调用。

【讨论】:

  • 这段代码我不知道怎么用,是不是要专门写一个Native Extension?
  • 我已经编辑了答案以描述这些电话所在的位置。不幸的是,我无法提供关于脚本级别的 API 是否可以在您的活动发生时访问这些 API 以更改舞台方向的建议。但如果它在那里,则必须编写旋转前和旋转后事件的处理程序以匹配。然后问题是是否有脚本访问来打开和关闭动画是否启用,并且由于这些是类方法,因此它将是一种特殊的脚本访问。