【问题标题】:iOS app using Air 3.9 - how can we reload a swf that was previously loaded?使用 Air 3.9 的 iOS 应用程序 - 我们如何重新加载以前加载的 swf?
【发布时间】:2013-12-25 10:46:49
【问题描述】:

我们正在使用 air 3.9 sdk 开发一个 iOS 应用程序。我们的应用程序是这样的,我们在 ipa 文件中打包了 2 个 SWF,即 main.swf 和一个 experience.swf。 main.swf 最初是使用 application.xml 加载的。在 main.swf 中单击按钮会加载 experience.swf(位于 ipa 的 bin 文件夹中,不是远程下载的)。这个 experience.swf 包含资产和代码。

当我们创建一个临时构建时,experience.swf 第一次加载完美,但如果用户返回到 main.swf 然后再次尝试加载 experience.swf,它不会加载。只有默认的舞台颜色可见。 (这个问题只出现在ad-hoc build上,debug build没有这个问题)

为了加载这个 experience.swf,我们使用 flash.display.loader 并将 loaderContext 设置为 ApplicationDomain.currentDomain。

mcExperience = new MovieClip();
var url:URLRequest = new URLRequest("ChristmasExperience.swf");
var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);

loader.load(url, loaderContext);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, CompleteHandler);

addChild(mcExperience);

private function CompleteHandler(e:Event):void
{
trace("I HAVE LOADED .... SWF loaded... , waiting for the constructor call back..." + e.target.loader.content);
//mcExperience.addChild(loader);
mcExperience.addChild(MovieClip(e.target.loader.content));
//TODO : Set the Session ID Here
m_experienceBase.SetSessionID(int(m_ExperienceSessionID));
m_experienceBase.SetLocalPlayer(m_localPlayer);
//(loader.content as MovieClip).soundTransform = new SoundTransform(0);
//addChild(loader);
//setChildIndex(m_tfConsoleMsgDisplay, numChildren - 1);
}

当体验卸载时,我们移除体验.swf 的持有者MovieClip 并卸载flash.display.loader。这仍然不会重新加载之前加载的 experience.swf。

if (mcExperience)
{
mcExperience.removeChildren();
removeChild(mcExperience);
mcExperience = null;
}

我们将 swf-version=22 用于主 swf 和体验 swf。

这对我们来说是一个相当大的问题,我们已经阅读了很多帖子,以帮助更好地理解这个问题(下面有几个例子):

有没有办法在 ios 应用程序中重新加载辅助 swf?

【问题讨论】:

  • 为什么要重新加载辅助 swf?为什么不将它保存在内存中并在需要时添加/删除子它? if(!mcExperience){ loadMcExperience();} else { return mcExperience; }

标签: ios actionscript-3 air flash loader


【解决方案1】:

不知道你是否在这里检查过: http://blogs.adobe.com/airodynamics/2012/11/09/packaging-and-loading-multiple-swfs-in-air-apps-on-ios/

基本上你不能在IOS上重新加载swf,这是Adobe口中的。

为了克服这个问题,Adobe 提供了一个注释: “注意:重新加载纯资产 SWF 将适用于 AIR 3.7 构建,可从此处下载”
如果你问我,那就太蹩脚了
那么你必须做什么? 好吧,像以前一样将孔代码放在旧的空气版本中,在第一个 swf 中,并将第二个 swf 纯粹用作图形/动画资源。

虽然这是一个很大的缺点,但归咎于 Adob​​e :D

【讨论】:

    【解决方案2】:

    尽管它说重新加载纯资产 SWF(SWF 不带 ABC)将适用于 AIR 3.7,但我发现 4.0 存在问题。我的 SWF 没有不起作用的代码,我需要一个解决方案。我在这里回答了我是如何做到的:Load and reload external SWF in AIR for iOS,更完整的在这里:http://www.eqsim.com/blog/?p=400

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 2013-03-02
      • 2010-12-01
      • 1970-01-01
      • 2022-12-04
      相关资源
      最近更新 更多