I'm trying to create / use a pre-loader in my flex application. The preloader is a SWF file which has 100 frames (1 for every percent of the loader progress). Basically I am trying to Embed this SWF file in my application, display it on screen and change the frame number being displayed as the progress completes.
The code I have so far is (which extends Canvas):
[Embed("/../assets/preLoader.swf")]
private var SWFClass:Class;
private var _preLoader:MovieClip;
private var _progress:Number;
public function set progress(value:Number) : void {
_progress = value;
if(progress < 100) {
_preLoader.gotoAndPlay(progress, null);
}else {
_preLoader.gotoAndStop(0, null);
}
}
[Bindable]
public function get progress() : Number {
return _progress;
}
(Called on creationComplete event)
private function init() : void {
_preLoader = MovieClip(new SWFClass());
this.addChild(_preLoader);
_preLoader.play();
}
The error I am getting is:
TypeError: Error #1034: Type Coercion failed: cannot convert widgets::PreLoader_SWFClass@30b3be51 to mx.core.IUIComponent.at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::addingChild()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Container.as:3259]
Please help!
You need to have a wrapper over MovieClip
that implements the IUIComponent
in order to be able to pass to addChild()
. From the addChild()
documentation:
Note: While the child argument to the method is specified as of type DisplayObject, the argument must implement the IUIComponent interface to be added as a child of a container. All Flex components implement this interface.
You will need something like this:
public class MovieClipUIComponent extends UIComponent {
public function MovieClipUIComponent (mc:MovieClip) {
super ();
mcHeight = mc.height;
mcWidth = mc.width;
// add your own magic
addChild (mc);
}
}
Warning: Untested code, should give you an idea only!