Loader类加载swf或者图片需要注意一些问题,先看看加载出错的代码:
import mx.core.UIComponent;
private var loader:Loader;
private var urlrequest:URLRequest
private function init():void{
loader=new Loader();
urlrequest=new URLRequest("assets/close.png");
loader.load(urlrequest);
this.addChild(loader);
}
运行的时候将会出现TypeError: Error #1034: 强制转换类型失败:无法将 flash.display::Loader@77f0561 转换为 mx.core.IUIComponent。
at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::addingChild()[E:/dev/3.0.x/frameworks/projects/framework/src/mx/core/Container.as:3251]
at mx.core::Container/addChildAt()[E:/dev/3.0.x/frameworks/projects/framework/src/mx/core/Container.as:2200]
at mx.core::Container/addChild()[E:/dev/3.0.x/frameworks/projects/framework/src/mx/core/Container.as:2140]
at LoaderExamples/init()[D:/myeclipse6.0workingspace/effect/flex_src/LoaderExamples.mxml:18]
at LoaderExamples/___LoaderExamples_Application1_creationComplete()[D:/myeclipse6.0workingspace/effect/flex_src/LoaderExamples.mxml:2]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[E:/dev/3.0.x/frameworks/projects/framework/src/mx/core/UIComponent.as:9051]
at mx.core::UIComponent/set initialized()[E:/dev/3.0.x/frameworks/projects/framework/src/mx/core/UIComponent.as:1167]
at mx.managers::LayoutManager/doPhasedInstantiation()[E:/dev/3.0.x/frameworks/projects/framework/src/mx/managers/LayoutManager.as:698]
at Function/http://adobe.com/AS3/2006/builtin::apply()
at mx.core::UIComponent/callLaterDispatcher2()[E:/dev/3.0.x/frameworks/projects/framework/src/mx/core/UIComponent.as:8460]
at mx.core::UIComponent/callLaterDispatcher()[E:/dev/3.0.x/frameworks/projects/framework/src/mx/core/UIComponent.as:8403]
这样的错误代码,手册上面并没有给出相似的例子可以参考,通过搜索资料,找到了原因,总结如下:
Loader类的继承关系如下:
Loader DisplayObjectContainer
InteractiveObject
DisplayObject
EventDispatcher
Object
application不能够直接的addChild(loader),一个解决方法是加上包装类UIConponent,代码如下面所示
import mx.core.UIComponent;
private var loader:Loader;
private var urlrequest:URLRequest;
private var uc:UIComponent;
private function init():void{
loader=new Loader();
urlrequest=new URLRequest("assets/close.png");
uc=new UIComponent();
loader.load(urlrequest);
uc.addChild(loader);
this.addChild(loader);
}