flex 4 - дождаться завершения загрузки без замораживания - PullRequest
0 голосов
/ 11 октября 2011

Мне было интересно, можно ли реализовать какую-либо логику, чтобы изображение завершило загрузку без замораживания.

Ради своего приложения я создал класс, который принимает URL-адрес изображения в конструкторе и загружает mx.controls.Image с помощью функции load ().

см. Класс ниже

package com
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
//import flash.net.URLRequest;

import mx.controls.Alert;
import mx.controls.Image;
//import mx.utils.OnDemandEventDispatcher;

public class SpriteImage extends Sprite
{
    //Pass the source path or url here.
    private var imageUrl:String;
    private var ready:int = -1;
    private var img:Image;

    public function SpriteImage(imgUrl:String)
    {
        //imageUrl = imgUrl;
        loadImage(imgUrl);
    }
    private function loadImage(imgUrl:String):void
    {

        img = new Image();
        img.addEventListener(Event.COMPLETE,onCompleteHandler);
        img.addEventListener(IOErrorEvent.IO_ERROR,onErrorHandler);     
        //img.source = imgUrl;
        img.load(imgUrl);

    }

    private function onCompleteHandler(e:Event):void{

        img.x = -(img.width/2);
        img.y = -(img.height/2);
        this.addChild(img);
        ready = 1;
    }

    private function onErrorHandler(e:IOErrorEvent):void
    {
        ready = 0;
        //Alert.show("Can't load :" + e.toString());
    }

    public function prepare():Boolean{

        while(ready == -1){
            trace(0);
        }           
        return ready;
    }
}

}

Теперь я использую этот класс из основного приложения, как это

var img:SpriteImage = new SpriteImage(e.imageUrl);
img.prepare(); // just waits till image is loaded but freezes
var obj:DisplayObject = img;

Теперь проблема в том, что приложение никогда не выходит из метода prepare (). Он зависает в браузере, и мне нужно убить процесс плагинов, чтобы разморозить приложение.

Основным критерием здесь является то, что мне нужно дождаться завершения загрузки изображения, чтобы я мог получить доступ к изображению на следующих шагах. Как я могу это сделать.? Пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 11 октября 2011

Похоже, вы сами замораживаете себя с этим , в то время как (готово == -1) Почему бы вам просто не отключить возможность пользователя идти дальше в своих "шагах" пока изображение не загружено?

Вам не нужно синхронно ждать загрузки изображения, как сейчас. После загрузки изображения вы получите уведомление о завершении события, которое отправляет его загрузчик. Затем вы можете включить все, что зависит от загружаемого изображения.

Один простой способ - связать свойство enabled элементов управления в вашем приложении с логическим свойством. Например, в свой SpriteImage добавить

[Bindable] public var isImageLoaded:Boolean = false;

и установите его в true после вызова onCompleteHandler. Вы можете привязать к значению этого свойства. Другой способ - отправить событие из вашего класса, чтобы уведомить других, что изображение загружено и что-то может произойти:]

Blaze

0 голосов
/ 11 октября 2011

A ProgressBar может оживить ваш пользовательский интерфейс таким образом, чтобы он не зависал при загрузке изображения.

Посмотрите документы Adobe для элемента управления ProgressBar . Абзац под названием Создание элемента управления ProgressBar содержит пример, который показывает, как отображать ProgressBar во время загрузки изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...