正确防止 Flex Mobile 应用程序中的方向变化

2023-12-14

有谁能够真正让它在 Flex SDK 4.6 中正常工作吗?

这是一个简短的片段:

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        addedToStage="onAddedToStage(event)"
        title="Title">
    <fx:Script>
        <![CDATA[  
            private function onAddedToStage(event:Event):void { 
                if (stage.autoOrients) {
                    stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, orientationChanging, false, 0, true);
                }
            }

            private function orientationChanging(event:StageOrientationEvent):void {
                if (event.afterOrientation == StageOrientation.DEFAULT || event.afterOrientation == StageOrientation.UPSIDE_DOWN) {
                    event.preventDefault(); 
                }     
            } 
        ]]>
    </fx:Script>
</s:View>

我想要实现的是在两个方向都支持横向模式,因此如果用户将设备旋转 180 度,屏幕也应该旋转。但是,当用户将设备旋转到纵向方向之一时,根本不应该有任何操作。相反,我看到导航器操作栏的宽度发生变化,有时内容处于纵向方向,因此显然阻止该事件是不够的。我正在使用 Adob​​e 建议的“官方”方式,但问题是它运行得不太好。当然,舞台没有改变,但无论如何,导航器中似乎有东西在触发,因为您可以看到操作栏宽度发生变化。

我在处理程序方法中显式地将布局边界设置为固定宽度取得了一些成功 - 这可以防止更改操作栏宽度,但这只是一个临时解决方案 - 如果视图受到转换或其他重绘的影响 - 它将再次呈现错误尺寸。好像下面有东西告诉它它处于纵向模式,尽管我试图阻止它。

在你用“autoOrient = false”之类的愚蠢想法引爆之前,不要这样做。这显然不是这个问题的解决方案。显然这是 Flex SDK 的一个错误 - 有没有人找到修复它的方法或稳定的解决方法?

编辑:显然其他人也遇到了类似的问题:
- http://forums.adobe.com/message/3969531(主要话题是别的,但请阅读神奇机器人的评论)
- http://forums.adobe.com/message/4130972


我不确定这是否是正确的,我最终做错了什么,但经过一番努力,我发现这是一个稳定的解决方案:

private function onAddedToStage(event:Event):void { 
    if (stage.autoOrients) {
        stage.removeEventListener(StageOrientationEvent.ORIENTATION_CHANGING, orientationChanging);
        stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, orientationChanging, false, 100, true);
    }
}      

private function orientationChanging(event:StageOrientationEvent):void {
    event.stopImmediatePropagation();
    if (event.afterOrientation == StageOrientation.DEFAULT || event.afterOrientation == StageOrientation.UPSIDE_DOWN) {
        event.preventDefault(); 
    }   
}  

首先要注意的是,addedToStage 在移动应用程序中会触发几次(2-3 次)。我不知道为什么,显然我的代码中没有 addChild 。也许 AIR 运行时会执行其他操作。因此,为了避免添加不必要的处理程序数量,常用的技术是首先删除处理程序 - 如果此类处理程序尚未注册,它不会执行任何操作,但如果存在,它将删除它,这将维护处理程序计数于 1.

第二件事是事件的优先级 - 它在 0 上不起作用,必须将其设置为较大的值,以便在 AIR 运行时中的内容之前启动。

最后一件事 - event.stopImmediatePropagation() - 现在,我们是第一个处理该事件的人,我们无法阻止该事件在这个特定场景中进一步发送。

这使得方向无法完美工作 - 对我来说,横向和反向横向(rotated_left、rotated_right)正在工作和过渡,而纵向模式根本不影响视图。

现在,这里存在危险 - 您可能希望在离开视图时删除侦听器(在过渡动画结束、视图停用或其他情况下),因为 stopImmediatePropagation 将阻止在应用程序的其他部分处理该事件。

我希望 Adob​​e(实际上是现在的 Apache)能够仔细研究这个问题并追踪我的解决方案。

EDIT

此解决方案还存在最后一个问题,即如果应用程序在设备处于 DEFAULT 或 UPSIDE_DOWN 方向时启动,在这种情况下应用程序将处于纵向模式。

要解决此问题,解决方案是在addedToStage处理程序中更改宽高比:

   if(Stage.supportsOrientationChange) {
         stage.setAspectRatio(StageAspectRatio.LANDSCAPE);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正确防止 Flex Mobile 应用程序中的方向变化 的相关文章

  • UILocalNotification 在后台 10 分钟后不提示

    In didFinishLaunchingWithOptions调用函数的定时器循环httpRequest每 1 分钟间隔一次 BOOL application UIApplication application didFinishLaun
  • 如何检测 UISwipeGestureRecognizer 的结束?

    来自苹果文档 滑动是一种离散手势 因此每个手势仅发送一次关联的操作消息 void touchesEnded NSSet touches withEvent UIEvent event 当我使用 UISwipeGestureRecognize
  • scntool:无法转换文件,失败原因:*** -[__NSSingleObjectArrayI objectAtIndex:]:索引 1 超出范围

    我正在 Xcode 9 3 下开发一个基于 iOS 11 3 SceneKit 的项目 我有几个 dae 文件格式的 3D 模型 每当我构建项目时 其中一个模型不会被复制到最终的 iOS 包中 深入研究错误 我在复制捆绑资源构建阶段收到以下
  • 使用远程图像创建 MSSticker

    我正在尝试找出使用网络上托管的图像创建 MSStickers 的方法 我可以使用本地图像创建 MSStickers 例如 NSString imagePath NSBundle mainBundle pathForResource imag
  • 使用 Protobuf-net,我收到有关 List 未知线路类型的异常

    我已经开始将 Unity iOS 游戏转换为使用 Protobuf net 保存状态 看起来一切正常 直到我将此实例变量添加到GameState ProtoMember 10 public List
  • AFNetworking XML 请求问题

    我在用着AFNetworking 2使用 JSON 响应 它工作正常 现在我必须将其转换为 XML 而不是使用 JSON 因为服务器响应是 XML 格式的 在我搜索之后 我找到了这段代码 但它不起作用 与 Charles 我发现请求是错误的
  • 如何开始复杂级别的跨平台移动应用开发? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在iOS中处理1到3个手指的滑动手势

    我使用以下代码来处理代码中的 1 根手指滑动 UISwipeGestureRecognizer swipe UISwipeGestureRecognizer alloc initWithTarget self action selector
  • 如何从 ContentView 外部显示 SwiftUI 警报?

    我正在构建 Swift 应用程序 并试图找出如何显示警报 我有一个单独的 swift 文件正在执行一些计算 并且在某些条件下我希望它向用户显示警报 基本上告诉他们出了问题 然而 我见过的大多数例子都要求警报在ContentView或以其他方
  • 从 UIPickerView 的选定行设置 UIButton 的标题

    详细场景是这样的 我使用循环创建 10 个按钮并设置 0 9 的标签 点击每个按钮时 我将调用 UIPickerView 在其中加载来自不同数组的数据 到这里我就得到了预期的结果 但我希望 pickerView 中选定的行应设置为相应按钮的
  • locationOfTouch 和 numberOfTouches

    你好 我有这个识别器 设置为 2 次触摸 但它只返回一个 而不是两个 CGPoint void gestureLoad UIGestureRecognizer recognizer recognizer UITapGestureRecogn
  • 将自定义数据包含到 iOS 故障转储中

    你好 堆栈溢出 有一个简单的问题要问您 当我的应用程序在用户的设备上崩溃时 是否可以将自定义错误数据嵌入到自动生成的 iOS 故障转储中 例如 我的 SQlite 数据库由于某种原因无法运行 例如 数据库文件已损坏 我无法从这个错误中恢复
  • 从按钮执行 Segue 时应用程序冻结

    我的故事板中有一个按钮 它呈现一个带有模式序列的视图控制器 每次按下此按钮时 应用程序都会冻结 没有崩溃 也没有错误消息 prepareForSegue被调用 所有应该存在的视图控制器都在代码中prepareForSegue 但它们不会出现
  • 会话重新启动后 AVcapture 会话启动缓慢

    我有一个主视图控制器 它连接到具有 avcapturesession 的第二个视图控制器 我第一次从主视图控制器转向捕获会话控制器 大约需要 50 毫秒 使用 仪器 检查 然后我从捕获会话返回到主视图控制器 然后从主控制器返回到 avcap
  • iOS 7 上 Safari 浏览器的用户代理

    我只想在带有 Safari 浏览器的 iPhone 和 iPod 中打开我的网站 对于 Chrome Dolphin 等任何其他浏览器 它不应该打开 但目前我从几乎所有设备获得相同的用户代理 对于Safari User Agent Stri
  • ReactiveCocoa 将 SignalProducers 合二为一

    我正在使用 ReactiveCocoa 并且我有几个 SignalProducers let center NSNotificationCenter defaultCenter let signalProducer1 center rac
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • 如何在代码中编辑约束

    我有一个以 100 开始宽度限制的网页 当用户单击按钮时 我想将约束更改为 200 我试过这个 NSLayoutConstraint constrain NSLayoutConstraint constraintWithItem self
  • Objective-C 中发送给对象的消息可以被监听或者打印出来吗? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 中拦截方法调用 https stackoverflow com questions 1618474 intercept method call in objective c 如
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S

随机推荐

  • 实体框架和自我跟踪实体与 POCO

    如果我想使用实体框架 4 作为我的数据层 并希望将我的实体发送到另一层 无论是通过 WCF 还是其他机制 然后希望能够更新实体并将它们发回以进行更新 删除 插入最好使用自跟踪实体还是 poco 对象 如果可能的话 我宁愿使用 POCO 对象
  • 在 ggplot 中绘制多个时间序列

    我有一个由 10 个变量组成的时间序列数据集 我想创建一个时间序列图 其中每个 10 个变量随着时间的推移以不同的颜色绘制在同一个图表上 值应位于 Y 轴上 日期应位于 X 轴上 点击这里对于数据集 csv 这是我一直在使用的 可能是错误的
  • 如何阅读这个 LESS css?

    我正在尝试找出 Joni Korpi 的 Frameless CSS 无框架网格 http framelessgrid com 并且我很难阅读他拥有的 less 文件 我对 LESS 使用变量有一个基本的了解 所以我知道 column 48
  • 安装 Windows 10 周年更新后无法启动 Android 模拟器

    我刚刚安装了 Windows 10 周年更新 现在无法启动 Android 模拟器 Android Studio 显示以下消息 Android Emulator is incompatible with Hyper V 但如下图所示 Hyp
  • 如何获取大型调查数据集的 svydb R 包以返回标准错误

    很高兴看到 Charco Hui 将 Thomas Lumley 的实验性 sqlsurvey 包复活为 svydb 在 R 中处理大型调查数据集可能是一个很好的工具 不过 在 svydb 计算标准误差时遇到了一些问题 这个问题与我在 sq
  • 尝试找到 4 个点的贝塞尔曲线的长度

    我找到了这个问题的大约 1000 个答案 但没有一个是我可以使用的 因为我在曲线中使用了 4 个控制点 也就是说 我偶然发现了这个人here double BezierArcLength point2d p1 point2d p2 poin
  • 播放案例类的json读取和默认参数?

    我对默认参数和使用 Play Json Read 有问题 这是我的代码 case class Test action String storeResult Option Boolean Some true returndata Option
  • 为 python 函数提供可变数量的参数

    我有一个脚本 它从输入文件中读取可变数量的字段并将它们作为参数传递给函数 例如 文件 1 包含字段 A B 和 C gt function A B C 文件 N 包含字段 A B C 和 D gt function A B C D 我的问题
  • 如何在 django 中使用 @ 提及用户

    我一直在 django 上开发一个项目 它与 instagram 和 twitter 非常相似 它需要具有的功能之一是在文本字段中使用 提及用户 我已经调查了一段时间 关于如何在 django 中做到这一点 除了一些像 django men
  • 如何在 tkinter Entry 小部件中仅插入一些指定的字符

    我有一个包含 n 个 Entry 小部件的列表 用户应该只能键入以下字符 V F 如果用户键入这些字符之一 则焦点应从 Entry x 传递到 Entry x 1 否则焦点应保留在原来的位置 在 Entry x 上 并且应丢弃输入 我无法丢
  • 如何在Java中递归解压文件?

    我有 zip 文件 其中包含一些其他 zip 文件 例如 邮件文件是abc zip它包含xyz zip class1 java class2 java And xyz zip包含文件class3 java and class4 java 所
  • 为第三方 Webflow 重定向 ionic 时要使用什么重定向 URL

    我正在开发一个离子移动应用程序 我想在其中重定向到第三方网络流 该网络流请求用户同意并重定向到回调 URL 我应该指定该回调 URL 以获取令牌作为权限令牌以进行进一步的 API 调用 由于 ionic 本身是一个 html5 移动应用程序
  • 为什么存在NotImplementedException?

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 这真的非常让我感到不安 所以我希望有人能给我一个合理的理由来解释为什么事情是这样的 NotImplementedException
  • Jackson 单参数构造函数因 ParameterNameModule 失败

    我正在使用 Jackson 2 8 5 和 Java 8 的 ParameterNamesModule https github com FasterXML jackson modules java8 当我想使用单个参数对具有单个构造函数的
  • 如何使中心圆居中?

    如何使中心圆居中 仅限 CSS 假设最新的 CSS3 浏览器支持 当父 w h 动态变化时 必须保持 v h 居中 实验性 CSS 盒模型规范在这里有帮助吗 Thanks http jsfiddle net dragontheory VdJ
  • 在 MS *Word* VBA 中循环选择不连续的部分

    我在 MS Word 2013 VBA 中有一个宏 notExcel 切换所选文本的突出显示颜色 代码看起来像 这 If Selection Range HighlightColorIndex WhtColor Then Selection
  • 使用新版本的应用程序更新和更改设置 plist 文件

    我的应用程序的资源文件夹中有一个默认设置 plist 文件 并且在第一次启动时该文件被复制到文档文件夹中 在应用程序的后续版本中 如何将文档中的 plist 设置与自上一版本以来添加的任何新键和值 可能是嵌套的 合并 我见过一种模式 其中属
  • PowerShell New-CommandWrapper :为以下参数提供值

    我的意思是对输出进行着色ls 我检查了Powershell 一劳永逸地正确着色 Get Childitem 输出 这两个选项似乎是 Use New CommandWrapper 正如 OP 和 Jon Z 的回答中所提倡的那样 使用模块PS
  • R 用字典表替换列中的值而不使用合并或连接

    假设我有一个字典表 例如 id value 1 168833 2 367656 3 539218 4 892211 millions of lines 和一个原始数据框 例如 name code Abo 1 Cm3 2 LL2 6 JJ 1
  • 正确防止 Flex Mobile 应用程序中的方向变化

    有谁能够真正让它在 Flex SDK 4 6 中正常工作吗 这是一个简短的片段