在AIR for iOS中加载和重新加载外部SWF

时间:2013-10-23 07:58:33

标签: ios actionscript-3 air flash

我找到了一些关于如何加载一个或多个外部SWF文件的信息,这些文件与我的AIR iOS App一起打包,实际工作代码是:

var myUrlRequest:URLRequest = new URLRequest(mySWF);
var myLoaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
var loader: Loader = new Loader();
loader.load(myUrlRequest, myLoaderContext);
Object(root).MK.addChild(loader)

适用于Android设备和Windows PC,但在iOS上,它仅在第一次加载外部SWF。在我的项目中,我有几个加载外部SWF的按钮,但每个按钮仅在第一次工作。

有什么想法吗?如果我无法重新加载SWF,这似乎非常无用。

4 个答案:

答案 0 :(得分:0)

如果你不能再次加载某些东西,也许最好只是缓存它并指出只加载一次?

答案 1 :(得分:0)

处理此问题的一个好方法是首次将SWF文件加载到单独的动画片段中,然后在需要“加载”它们之后,只需显示那些已经加载了SWF文件的动画片段。 / p>

答案 2 :(得分:0)

您无法加载包含任何ActionScript ByteCode(ABC)的SWF文件,然后将其卸载并在iOS上重新加载。如果您尝试这样做,运行时将抛出错误3764。

答案 3 :(得分:0)

即使没有代码第二次加载SWF也遇到了问题。我找到的解决方案取决于代码是来自应用程序区域(与应用程序打包)还是外部加载(从Web上下载或下载到缓存文件夹中)。 如果你有兴趣,我写了一篇关于这里的扩展帖子:http://www.eqsim.com/blog/?p=400 简而言之,这是我设置路径的代码:

var moduleDirectoryPath = "/modules/";

if (externalContent == FROM_CACHE) {
   moduleDirectoryPath = File.cacheDirectory.url + moduleDirectoryPath;
} else if (externalContent == FROM_WEB) {
   moduleDirectoryPath = "http://our-online-content.com" + moduleDirectoryPath;
}

然后这是我准备路径的代码,如果SWF来自应用程序区域或其他(缓存或Web):

if (loadFromApp) {
   path = moduleDirectoryPath + module_folder + "/" + module + "?nf="+getTimer();
} else {
   path = moduleDirectoryPath + module_folder + "/" + module;
}

最后,我的加载语句:

request = new URLRequest(path);
request.cacheResponse = false;
request.useCache = false;
_lc = new LoaderContext(false, ApplicationDomain.currentDomain, null);
moduleLoader.load(request, _lc);

现在我可以加载SWF并重新加载它们(更重要的是)。当然,SWF中没有字节码。