2011-08월 21일 어느날 ..
대체 이게 뭘 정리한거지????? -_- 1년이 지나고 보니 내가 쓴거지만 뭔 내용을 쓴건지 도통 모르겠다 ㅠㅠ
컴포넌트작성시 글씨를 표시해야 하는데 Label 를 사용하여 표시하려고 했지만..
왠지 더 가벼운 객체가 있을꺼 같아서 label 객체를 분석하였다.
Label 객체내부에서 텍스트 표시를 위해 사용되는 객체니깐 당연히 Label 보다 가볍다고 본다;;
다음은 Label에서 IUITextField를 사용하는 부분을 정리하였다.
{
super.createChildren();
if (!textField)
createTextField(-1);
}
- createTextField(-1);
override protected function commitProperties():void
{
super.commitProperties();
if (hasFontContextChanged() && textField != null) 1
{
removeTextField();
condenseWhiteChanged = true;
enabledChanged = true;
selectableChanged = true;
textChanged = true;
}
if (!textField) 2
createTextField(-1);
}
1. 뭔가 바뀌면 삭제..(정확한건 모르겠음.)
- 삭제 했을때는 반드시 이벤트도 같이 삭제 한다.
2. 삭제 했을지 모르니 다시 생성.
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
var paddingLeft:Number = getStyle("paddingLeft");
var paddingTop:Number = getStyle("paddingTop");
var paddingRight:Number = getStyle("paddingRight");
var paddingBottom:Number = getStyle("paddingBottom");
textField.setActualSize(unscaledWidth - paddingLeft - paddingRight,
unscaledHeight - paddingTop - paddingBottom);
textField.x = paddingLeft;
textField.y = paddingTop;
var t:String = isHTML ? explicitHTMLText : text;
var textFieldBounds:Rectangle = measureTextFieldBounds(t);
if (truncateToFit)
{
var truncated:Boolean;
if (isHTML)
{
truncated = textFieldBounds.width > textField.width;
}
else
{
textField.text = _text;
truncated = textField.truncateToFit();
}
if (!toolTipSet)
super.toolTip = truncated ? text : null;
}
}
mx_internal function createTextField(childIndex:int):void
{
if (!textField)
{
textField = IUITextField(createInFontContext(UITextField));
textField.enabled = enabled;
textField.ignorePadding = true;
textField.selectable = selectable;
textField.styleName = this;
textField.addEventListener("textFieldStyleChange",
textField_textFieldStyleChangeHandler);
textField.addEventListener("textInsert",
textField_textModifiedHandler);
textField.addEventListener("textReplace",
textField_textModifiedHandler);
if (childIndex == -1)
addChild(DisplayObject(textField));
else
addChildAt(DisplayObject(textField), childIndex);
}
}
textField = IUITextField(createInFontContext(UITextField)); 왜 이렇게 생성하는지 모르겠음
- 생성시에 관련이벤트를 등록
- DisplayObject 객체로 변환해서 add를 해야 한다는 점 기억하자.
{
if (textField)
{
textField.removeEventListener("textFieldStyleChange",
textField_textFieldStyleChangeHandler);
textField.removeEventListener("textInsert",
textField_textModifiedHandler);
textField.removeEventListener("textReplace",
textField_textModifiedHandler);
removeChild(DisplayObject(textField));
textField = null;
}
}
이런식의 자원관리는 필수임..
하고 보니 거의 Label 소스분석이 되어 버렸다 -_-..
'Flex / AIR / AS' 카테고리의 다른 글
DateFormatter 사용하기. (0) | 2009.08.17 |
---|---|
[AS3.0] 각 달의 마지막 날짜 구하기 (0) | 2009.08.11 |
ResourceBundle 사용하기. (0) | 2009.06.18 |
[Flex3.0] Box로 구현한 Drag and Drop (0) | 2009.06.11 |
Point 클래스 (0) | 2009.06.02 |