2011-04-11 5 views
1

BorderContainer 내부에 격자에 맞추기 기능을 제공해야합니다. 모든 기능이 완료되었지만 그리드를 그리는 한 가지 문제로 인해 막혔습니다.Flex UI 구성 요소 안에 그리드를 그리는 데 사용할 이벤트

  1. Creation_Complete 이벤트를 사용하여 시도했지만 제대로 작동하지만 자식이 추가되자 마자 눈금이 사라집니다.

  2. 오버라이드가 updateDisplayList - 이것은 최선의 선택은 지금까지 (모든 것이 잘 작동),하지만 움직일 때마다 문제는 (또는 이동할 때 오히려) 내부 통제가 updateDisplayList 방법이라고합니다 (I는 ObjectHandles 라이브러리 사용)하는 그리드를 다시 그립니다 -> 이동 과정이 매우 느려집니다.

그리드를 채우는 방법입니다.

numRows = Math.ceil(this.unscaledHeight/gridSize); 
numCols = Math.ceil(this.unscaledWidth/gridSize); 

this.graphics.beginFill(0x000000, 1.0); 

for (var i:int= 0; i < numRows; i++) 
{    
    for (var j:int = 0; j < numCols; j++) 
    {  

     this.graphics.drawCircle(j * gridSize, i * gridSize, 1); 
    } 
} 

this.graphics.endFill(); 

컨테이너를 크기 조정할 때만 한 번 그립니다. 이 일을 성취하는 데 도움이되는 어떤 사건이 있습니까? 아니면 그리드를 그리는 데 도움이되는 효율적인 방법이 있습니까? 모든 의견 및 제안을 환영합니다. 고맙습니다 :

답변

2

updateDisplayList()unscaledWidthunscaledHeight을 매개 변수로 갖는 방법입니다.

그래서 당신은 다음과 같은 방법을 다시 그릴 필요가 피할 수 있습니다 :

private var previousUnscaledWidth:Number; 
private var previousUnscaledHeight:Number; 

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
{ 
    … 
    if (unscaledWidth != previousUnscaledWidth || unscaledHeight != previousUnscaledHeight) 
    { 
     // Your drawing routine here 

     previousUnscaledWidth = unscaledWidth; 
     previousUnscaledHeight = unscaledHeight; 
    } 
} 

당신은 기본 클래스로 UIComponent을 가지고 사용자 정의 ActionScript 컴퍼넌트 내에서이 코드를 배치 할 수 있습니다. 그리고이 격자를 BorderContainer 안에 배치하십시오.

<s:BorderContainer> 
    <MyGrig left="0" right="0" top="0" bottom="0" /> 
    <!-- Another container's content here --> 
</s:BorderContainer> 
+0

Nice !! 직장에서 이것을 시도하고 알려 드리겠습니다. 이 트릭을해야합니다 :) –

+0

안녕하세요. 노력에 대한 고맙습니다. 하지만 코드의 문제는 다음에 updateDisplayList가 호출 될 때 그려주지 않으면 사라진다는 것입니다. 더 이상의 제안? –

+0

귀하의 요구 사항을 충족시키기 위해 제 대답이 향상되었습니다. – Constantiner