我正在使用Adobe AIR,Flash和ActionScript 3开发IOS应用程序,我将各个部分划分为单独的SWF文件。我已成功获得应用程序以加载外部SWF并使用以下代码执行其ActionScript:
var proloader:ProLoader = new ProLoader();
proloader.load(new URLRequest("file.swf"), new LoaderContext(false, ApplicationDomain.currentDomain, null));
addChild(proloader);
现在,我想添加一个重置按钮,允许用户从任何其他SWF文件返回到第一个SWF的开头,以重新启动应用程序。不幸的是,似乎每当我尝试加载以前加载过的SWF时,都没有任何反应。我已经读过在IOS上不允许卸载和重新加载SWF,而且你在IOS上只限于一个ApplicationDomain这一事实使事情变得困难。但是,我仍然认为必须有一些解决方法。如果这是唯一的方法,我可以不卸载外部SWF,但我仍然无法找到返回之前加载的SWF的方法。
有没有人知道如何返回之前使用Adobe Air在IOS中加载的SWF?
答案 0 :(得分:0)
你可以拥有一个充当缓存的静态类。
缓存可能看起来像我为菜单系统做的那样:
package com.rs2014.managers { import flash.display.MovieClip; import flash.utils.Dictionary; import flash.events.Event; import flash.events.EventDispatcher;
import com.events.MenuManagerEvent;
import com.menus.MenuBase;
import com.components.MenuLoader;
import com.MenuIdents;
public class MenuManager extends EventDispatcher
{
private static var instance:MenuManager
private static var allowInstantiation:Boolean = true;
public static function getInstance():MenuManager
{
if(!instance)
{
instance = new MenuManager();
allowInstantiation = false;
}
return instance
}
private const MAX_MENUS:uint = 8;
private var menuCache:Dictionary = new Dictionary()
public function MenuManager()
{
if(!allowInstantiation)
{
throw(new Error("please use the getInstance() method to obtain a handle to this singleton"));
}
}
public function getMenu(menu:String):void
{
if(menuCache[menu])
{
//This pulls from the cache if it's already been loaded before
dispatchMenu(null, menuCache[menu]);
}
else
{
//MenuLoader is a simple wrapper for Loader
var newLoader:MenuLoader = new MenuLoader();
menuCache[menu] = newLoader;
newLoader.addEventListener(Event.COMPLETE, dispatchMenu);
newLoader.source = menu;
//trace("setting up loader with source = "+menu);
}
}
private function dispatchMenu(e:Event = null, menu:MenuBase = null):void
{
if(e)
{
e.target.removeEventListener(Event.COMPLETE, dispatchMenu);
//trace(e.target.content);
//trace(e.target.content as MenuBase);
menuCache[e.target.source] = menu = e.target.content as MenuBase;
//trace(menu);
}
if(!menu)
{
throw(new Error("MenuManager Error: dispatchMenu called without menu to dispatch"));
}
this.dispatchEvent(new MenuManagerEvent(MenuManagerEvent.MENU_READY, menu))
}
}
}
答案 1 :(得分:0)
我能够解决重新加载SWF没有ABC的问题(没有代码!),我在我的博客(http://www.eqsim.com/blog/?p=400)上解释了这一切,但也简单地在StackOverflow上给出了代码:{{3} } wf-in-air-for-ios / 22046009#22046009
现在Adobe有一个解决方案,用于从SWF中分离代码,并在外部加载SWF。但是,我们在AIR 3.5之前通过仅为代码创建类,然后加载SWF并在代码类中设置指向加载的SWF的链接来解决它。当我们需要更新到4.0时,SWF重新加载,甚至是纯SWF资产,并不是在所有情况下都能正常工作,所以我们插上去寻找上面引用的解决方案。