Adobe AIR, IOS и несколько SWF-файлов - возврат к ранее загруженному SWF-файлу

Я разрабатываю приложение IOS с использованием Adobe AIR, Flash и ActionScript 3, и я разделил разделы на отдельные 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-файл, ничего не происходит. Я читал, что выгрузка и повторная загрузка SWF-файлов не разрешены в IOS, и тот факт, что вы ограничены одним ApplicationDomain в IOS, усложняет задачу. Тем не менее, я все еще думаю, что должен быть какой-то обходной путь. Я был бы согласен с тем, чтобы никогда не выгружать внешние SWF-файлы, если это единственный способ, но я все еще не могу найти способ вернуться к ранее загруженному SWF-файлу.

Кто-нибудь знает способ возврата к SWF, который был ранее загружен в IOS с Adobe Air?

2 ответа

Вы можете иметь статический класс, который функционирует как кеш.

Кеш может выглядеть примерно так, как я сделал для системы меню:

пакет com.rs2014.managers{ import flash.display.MovieClip; import flash.utils.Dictionary; импорт flash.events.Event; импорт 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))

    }



}

}

Я смог решить проблему перезагрузки SWF без ABC (без кода!), Я объясняю все это в своем блоге ( http://www.eqsim.com/blog/?p=400), но также просто даю код в Stackru: загрузка и перезагрузка внешнего SWF -файла в AIR для iOS wf-in-air-for-ios / 22046009 # 22046009

Теперь у Adobe есть решение для отделения кода от SWF и внешней загрузки SWF. Однако мы обратились к нему до AIR 3.5, создав класс только для кода, затем загрузив SWF и в классе кода, установив ссылку на загруженный SWF. Когда нам нужно было обновить до 4.0, перезагрузка SWF, даже чистые активы SWF, работала не во всех ситуациях, поэтому мы отключились, чтобы найти решение, на которое я ссылаюсь выше.

Другие вопросы по тегам