• 理解自定义组件


    原文:http://www.billdwhite.com/wordpress/?p=21
    理解组件的生命周期
    组件的生命周期是一系列被flex框架调用的方法,这是每个组件都会经历的。这些方法包括:
    • The component’s constructor
    • The commitProperties() method
    • The createChildren() method
    • The measure() method
    • The updateDisplayList() method
    分开来讲:
    1,constructor()
    在构造函数里,你可以设置初始的属性,做些不管组件是否在屏幕上显示过都需要处理的事情。你不应该做这些事:创建子元素和定位,因为这个阶段你还没有足够的信息。构造方法在组件被创建的时候调用,生命周期里的其他方法直到一个组件被加到一个容器里才会被调用。
    1 var blah:Button = new Button(); // invokes the constructor
    2 container.addChild(blah);       // adds the component to a container,  triggering the other lifecycle methods

    2,createChildren()
    这个方法用来创建任何可视的子元素(children),但是,只是创建子元素并不定义大小和位置,因为你的组件还不知道它有多少的屏幕空间。当你还不知道你有多大的操作空间时,你不能告诉你的子元素它们能有多大。也就是说,这是由component的空间你还不知道,如何定义它的children的大小?定位也一样。

    3,measure()
    调用measure()方法,用来决定一个组件所要求的屏幕空间。这个方法负责设置一个组件的四个属性:
    • measuredMinWidth
    • measuredMinHeight
    • measuredWidth
    • measuredHeight
    这些元素只是一个组件对其父元素建议的大小,这里就是updateDisplaylist进入的地方。这个measure方法也会调用layout manager。布局管理器负责确保设置组件大小的程序被开始。布局管理器通常从最外面的组件开始。要想知道一个组件需要多大地方,首先得知道他的子元素要多大地方。

    4,updateDisplayList
    当在一个组件上调用updateDisplayList方法,这个方法被传递了两个参数:unscaledWidth,unscaledHeight。基本的,他告诉你‘不要考虑你要求的,这里是你得到的’。你可以选择忽略组建的建议宽度和高度,而给他设置任意你先要的大小。如果它的高度和宽度不足以容纳所有的组件,那么滚动条将出现。这个方法也负责定位子组件。

    5,commitProperties
    这个属性是为了协调属性的更改,为什么要协调属性呢?因为有些时候你想要等待不止一个的你所依靠的属性被设置好了。也有些时候你不想改变一发生就调用个复杂的方法。所以呢,这个方法就能够让你拖延上面的事情直到屏幕需要被重绘,因为这个方法是被flex framework预定的,当需要的时候会被调用。

    如何告知framework上述那些方法被需要呢?
    • invalidateDisplayList()
    • invalidateProperties()
    • invalidateSize()
    这些方法告诉flex framework呀确保这些方法要在下次合适的时间被调用。
    我们必须记住下面这些要点:
    1,constructor-------设置一些东西但是不创建子元素和定位元素。
    2,createChildren-------创建子元素但是不设置他们的大小和定位他们。
    3,measure------------确定需要的屏幕空间。
    4,invalidateSize---------告诉Flex去重新测量某些东西。
    5,updateDisplayList---------得到unscaledWidth和unscaledHeight。你可以用它也可以忽略它。可以定位元素。
    6,invalidateDisplayList--------让flex框架调用updateDisplayList方法
    7,commitPorperties----------协调属性的更改
    8,invalidateDisplayList-----------让flex调用invalidateDisplay方法





  • 相关阅读:
    AsyncTask类
    linux下带有空格的文件怎么删除
    python 获取指定文件夹的大小
    python 无法获取隐藏文件夹中的文件列表
    LINK : fatal error LNK1104: 无法打开文件“libboost_serialization-vc90-mt-gd-1_62.lib”
    解决错误 fatal error C1010: unexpected end of file while looking for precompiled head
    PCH Warning: header stop cannot be in a macro or #if block.
    C++ Boost在VS2015中的使用
    dev-c++ boost库的安装
    python 获取命令行输出结果
  • 原文地址:https://www.cnblogs.com/orchid/p/1561440.html
Copyright © 2020-2023  润新知