代码之家  ›  专栏  ›  技术社区  ›  Mark Ingram

完成/进度事件不是为嵌入内容的图像控制而触发的

  •  1
  • Mark Ingram  · 技术社区  · 16 年前

    我有以下MXML标签:

    <mx:Image id="image" width="100%" height="100%" 
                  source="@Embed('../assets/Test.swf')" 
                  complete="completeHandler(event)" 
                  progress="progressHandler(event)"/>
    

    但出于某种原因,没有调用我的completehandler/progresshandler函数。我需要完整事件的原因是,我想在加载图像后操作位图数据。在CreationComplete中,位图数据仍然为空。为什么这些事件没有发生?

    编辑: 资产在我的应用程序中正确地显示了——所以我知道资产在正确的位置上(嵌入保证了在编译时)。

    4 回复  |  直到 10 年前
        1
  •  0
  •   dirkgently    16 年前

    检查资产路径。最可能的是,SWF的路径不正确,或者没有被复制到 assets 调试生成/发布生成目录中的文件夹。

        2
  •  0
  •   Pat Niemeyer    15 年前

    因此,您只需将event.complete侦听器直接添加到loader.contentloaderinfo,而不是添加到loader。我真不敢相信这不是医生说的。

        3
  •  0
  •   Mark Ingram    15 年前

    如果使用的是嵌入的资源,则“宽度/高度”属性将立即在源对象上可用:

    var mySource:Object = new embeddedClass();
    m_myWidth = mySource.width;
    m_myHeight = mySource.height;
    m_image = new Image();
    m_image.source = mySource;
    

    因此,必须先创建源的实例,然后在图像对象上设置源。

        4
  •  0
  •   duTr    10 年前

    这似乎是这里的预期行为!

    从文档中:

    不保证调度进度事件。可以接收完整事件,而不调度任何进度事件。当加载的内容是本地文件时,会发生这种情况。

    所以我认为这部分可以解释为什么在你的例子中没有进度事件。

    内容加载完成时发送。与完整事件不同,此事件针对所有源类型进行调度。 请注意,对于通过加载器加载的内容,准备就绪和完成事件都会被调度。 对于其他源类型(如embeds),只发送ready。

    它清楚地表明,在处理嵌入源时,您应该监听准备好的事件,而不是完整的事件;)