Лучший способ узнать, запущен ли Event.COMPLETE для <Image>во Flex - PullRequest
0 голосов
/ 19 октября 2008

Я ищу лучший способ узнать, вызвал ли <mx:Image> событие Event.COMPLETE. Я хочу сделать что-нибудь, если оно показало, или прикрепить обработчик события, если это еще не сделано.

что-то вроде:

if (newBackground.percentLoaded < 100) 

или

if (newBackground.content != null)

Первоначально я делал newBackground.content != null, но у него были некоторые междоменные проблемы, потому что песочница явно не позволяла мне получить доступ к контенту!

Я даже немного устал от использования percentLoaded < 100 в случае возможных условий гонки.

Да, я знаком с showEffect, но это не то, что я хочу для этого.

Ответы [ 4 ]

1 голос
/ 19 октября 2008

Я предполагаю, что вы по какой-то причине не можете подключить прослушиватель событий Event.COMPLETE к образу до его загрузки. В этом случае вы всегда можете создать подкласс mx.controls.Image и добавить свое собственное свойство "loadingCompleted" или "complete", которое изначально false, но получает значение true, когда событие Event.COMPLETE запускается в первый раз.

1 голос
/ 19 октября 2008

На загрузчиках в AS3 никогда не будет условия гонки, потому что эта часть API не является многопоточной. Просто добавьте прослушиватель событий до начала загрузки, и все будет в порядке. Если вы используете MXML, тогда об этом позаботятся все для вас.

Если есть какая-то причина, по которой вы не можете контролировать элемент управления изображением, то рекомендуется сравнивать bytesLoaded и bytesTotal.

// this will not race  
if (myImage.bytesLoaded < myImage.bytesTotal)  
{  
  myImage.addEventListener(Event.COMPLETE, handleImageComplete);  
}  
else  
{  
  // it's already done, do whatever you need to with it...  
}
0 голосов
/ 24 октября 2008

Использование событий - лучший подход. Если у вас есть сценарий, в котором события не работают, вы можете отслеживать свойства contentWidth и contentHeight элемента управления изображением. Согласно документу, «Вы можете получить значение после запуска события updateComplete». Перед загрузкой значение NaN. После загрузки содержимого оно становится числом.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/Image.html

0 голосов
/ 19 октября 2008

Вы не подписались на Полное Событие. Или Событие Прогресса? Вы используете Loader? Я уверен, что во flex вы можете прикрепить обработчики событий в разметке изображения как минимум для завершения и прогресса. Прогресс выдаст вам TotalBytes и bytesLoaded.

Ура, Andrew

...