2012-10-19 4 views
3

내가하려는 일에 대한 배경 지식. 날짜를 표시 할 스타일리쉬 한 텍스트 필드가있는 사용자 정의 스킨이 있습니다. 날짜에 묶인 스타일러스 텍스트 필드를 클릭하면 날짜 회 전자가 나타납니다. datespinner 뒤에 나는 전체 화면을 덮을 필요가있는 스프라이트를 그리고 클릭을 감지하고 datespinner를 사라지게 할 수 있습니다.하나의 구성 요소에 대한 폭 또는 높이 가져 오기 오버라이드 -

이제 problem-

가져 오기 폭을 무시하거나 I 전체 화면을 채울 수 없었던 높이를 얻을 수 없음. 그러나이 작업을 수행 할 때 오버라이드에서 높이를 얻으므로 datespinner가 중단됩니다. 아무도 단 하나의 구성 요소를 재정의하고 다른 모든 구성 요소를 기본값으로 설정하는 방법을 알고 있는지 궁금합니다. 이것이 멍청한 질문처럼 보일 수도 있고 분명히 뭔가 빠져있을 수도 있다는 것을 알고 있습니다. 나는 거의 as3에 익숙하지 않습니다.

여기에 일부 코드는 완전하지 않지만 단지에서 내 포인트를 얻기위한 것입니다

override protected function createChildren():void { 
     super.createChildren(); 
      if(!img) { 
       img = new dateButtonBG(); 
       addChild(img); 
      } 

      if (!maskSprite) { 
       maskSprite = new Sprite(); 
       maskSprite.graphics.beginFill(0xFFFFCC, .5); 
       maskSprite.graphics.drawRect(-((stage.height)/2),-((stage.width)/2), stage.width, stage.height); 
       maskSprite.graphics.endFill(); 
      } 

if(!dateButton) { 
       dateButton = new StyleableTextField(); 
       todayDate = new Date(); 
       BindingUtils.bindProperty(dateButton, "text", date, "selectedDate"); 
       dateButton.addEventListener(MouseEvent.CLICK, onDateButtonClick); 
       addChild(dateButton); 
      } 
invalidateDisplayList(); 
} 

protected function removeSpinner(event:Event):void{ 
      maskSprite.removeEventListener(MouseEvent.CLICK, removeSpinner); 
      removeChild(date); 
      removeChild(maskSprite); 
     } 

protected function onDateButtonClick (event:Event):void { 
      addChild(maskSprite); 
      addChild(date); 
      maskSprite.addEventListener(MouseEvent.CLICK, removeSpinner); 
     } 

override public function get width() : Number { 
      return _width; 
     } 

override public function get height() : Number { 
      return _height; 
     } 

을 코드 -입니다. 읽고 모든 도움을 주셔서 감사합니다.

편집 -

나는 어떤 사람이 같은 problem- 플렉스 컨테이너의 크기에 스프라이트의 크기 (또는 UI 구성 요소) 제한이 경우 it.Adding에게 약간의 정보를 수행하는 방법을 알아 냈어. 컨테이너의 크기를 넘 으려고하면 그냥 컨테이너의 크기를 반환합니다. 내 코드에서 -

override public function get width() : Number { 
      return _width; 
     } 

override public function get height() : Number { 
      return _height; 
     } 

이것은 일반적으로 컨테이너의 크기를 넘기위한 고지로 선전됩니다. 그러나이 방법은 결함이 있습니다. 폭과 높이를 묻는 모든 것을 무시하기 때문입니다. 이 경우에는 _height 및 _width 크기의 모든 것을 만들려고합니다. 1 개 이상의 구성 요소가있는 스킨의 경우 큰 문제입니다. 개별적으로 항목의 크기를 설정할 수도 있습니다. 이는 나를 위해 작동하지 않거나 대체 방법을 찾지 못했습니다. 다음은이 그러나 충분하지 않을

public override function validateDisplayList():void { 
      super.validateDisplayList(); 
      yourComponent.width = someConstantW; 
      yourComponent.height = someConstantH; 
     } 

작품 - 것입니다. 이

override protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void { 
       super.layoutContents(unscaledWidth, unscaledHeight); 
       setElementPosition(yourComponent, x, y); 
      } 

는 다행스럽게도 필자는 저장 try- 사람을 용기의 외부 작업 : 그것은 당신이 코드는 매우 명확 게시 아니에요

답변

0

의 몇 시간 구성 요소를 이동해야하지만, 아마도 수 widthheight 대신 updateDisplayList() 메서드를 재정의해야합니다.

updateDisplayList()은 구성 요소가 하위 개체의 크기를 조정하고 위치를 지정하기 위해 구현하는 Flex 수명주기 메서드입니다.

updateDisplayList()은 Flex 프레임 워크에서 호출되며 unscaledWidthunscaledHeight의 두 값을 전달합니다. updateDisplayList()의 임 플리 멘 테이션은 그 값을 존중하고 그에 따라 하위 오브젝트의 크기/위치를 지정해야합니다. 실제 크기 조정/위치 지정을 수행하려면 다른 수명주기 방법 (아래 참조)을 사용해야합니다.

다음은 시작하기위한 구현 예입니다. 내가 제공 한 코드 스 니펫을 완전히 이해하지 못하기 때문에 약간의 문제 일 수 있습니다.

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
{ 
    super.updateDisplayList(unscaledWidth, unscaledHeight); 
    // size/position the background (or whatever it is that should occupy the whole screen) 
    background.setLayoutBoundsPosition(0,0); // unnecessary because 0,0 is default 
    background.setLayoutBoundsSize(unscaledWidth, unscaledHeight); 
    // size/position the text in the center 
    var textWidth:Number = text.getPreferredBoundsWidth; 
    var textheight:Number = text.getPreferredBoundsHeight 
    text.setLayoutBoundsPosition((unscaledWidth - textWidth)/2, (unscaledHeight - textHeight)/2); 
    text.setLayoutBoundsSize(textWidth, textHeight); // probably not necessary 

} 
+0

이미 도움이되어 주신 것에 감사 드리며, 이미 updateDisplayList를 무시하고 있습니다.스프라이트를 컨테이너보다 크게 만들고 다른 모든 것을 같은 크기로 유지하려고합니다. 하지만 당신이 getPrefferredBoundWidth, Height로 올바른 경로에 나를 넣었을 것 같아요. – apaul

관련 문제