2011-08-04 4 views
0

이미지에 주석을 추가하려고합니다.
특정 노트 (주석)를 나중에 제거하거나 편집 할 수 있도록 이러한 주석을 모두 콜렉션에 저장하려고합니다.Flex 4의 콜렉션에 그리기 개체 추가

나는 예를 마크 업에 대한 UIComponent 인스턴스를 만드는거야 나는 사용자가 내 이미지에 새로운 주석을 만드는 때마다 때마다 UIComponent 구성 인스턴스를 생성 할

markUp.graphics.lineStyle(2, drawColor); 
markUp.graphics.moveTo(x1, y1); 
markUp.graphics.lineTo(x2, y2); 

하고.

동적 인스턴스 생성 방법 및 컬렉션에 저장하는 방법. 어떤 도움을 주셔서 감사합니다. 내가 Kishor과의 대화 후 이해하는 것과

+0

아직 이해가 안됩니다. 당신은 하나의 이미지 또는 다른 이미지를 가지고 있습니까? 사용자는 정확히 무엇입니까? 특수 효과를 새로 고침 할 이벤트가 있습니까? 단일 이미지에 대한 주석 인스턴스가 여러 개 있습니까? 컬렉션 스토어는 무엇을 저장해야합니까? x, y, w, h? –

+0

주석은 텍스트입니까? 코드에는 그려진 선만이 표시됩니다. –

+0

@Jens Struwe - 예, 이미지 갤러리가 있습니다. 이미지는 둘 이상의 주석을 가질 수 있습니다. 내가 나중에 내 사용자가 특정 이미지의 주석을 편집/삭제할 수 있도록 주석 컬렉션 이미지를 저장하려고합니다.사용자가 이미지에서 마킹을 시작하면이 자식을 직접 이미지에 추가하고 싶지 않습니다. 이 주석을 이미지에 추가 된 컬렉션에 추가하고 싶습니다. 해당 컬렉션을 통해 특정 주석을 제거/편집 할 수 있습니다. –

답변

1

:

사용자가 마우스 드래그하여 특정 영역을 표시하고 그에 따라 주석을 추가 할 수 있습니다. 마크 업과 주석은 데이터베이스에 저장됩니다.

한 번에 하나의 이미지 만 확대되며이 이미지는 모든 마크 업을 표시해야합니다. 마크 업을 클릭하면 연관된 주석을 보여주는 팝업이 표시됩니다.

마크 업을 그리는 것은 비용이 많이 들기 때문에 사용자가 이미지를 전환 할 때 특정 마크 업을 다시 사용해야합니다. 질문은 지금 :

이미지에 표시된 마크 업을 재사용하는 방법은 무엇입니까?

답변 :

사용 Object 또는 하나 개의 이미지 당 항목 및 마크 업의 Array에 대한 진입 점을 만들 Dictionary. 이지도의 기능을 캡슐화하는 편리한 클래스를 만들 수 있습니다 :

package { 
    import flash.display.DisplayObject; 

    public class Markups { 
     private var _map : Object; 

     public function Markups() { 
      _map = new Object(); 
     } 

     public function addMarkup(imageId : String, markup : DisplayObject) : void { 
      if (!_map[imageId]) _map[imageId] = new Array(); 
      (_map[imageId] as Array).push(markup); 
     } 

     public function hasMarkups(imageId : String) : Boolean { 
      return _map[imageId] !== undefined; 
     } 

     public function getMarkups(imageId : String) : Array { 
      return _map[imageId]; 
     } 

     public function removeMarkup(imageId : String, markup : DisplayObject) : void { 
      var markups : Array = _map[imageId]; 
      var index : int = markups.indexOf(markup); 
      markups.splice(index, 1); 
      if (!markups.length) delete _map[imageId]; 
     } 
    } 
} 

저장이지도를 이미지 컨테이너에서 액세스 할 수있는 장소에서.

var markupsPerImage : Markups = new Markups(); 

추가 또는 같은 마크 업 제거 : 사용자가 현재 이미지를 변경할 때마다

markupsPerImage.addMarkup(myImage.id, markupView); 
markupsPerImage.removeMarkup(myImage.id, markupView); 

당신 1. 정리지도에 저장된 모든 마크 업 마지막 2. 추가 모든 마크 업. 이미지 컨테이너에서

:

public function setImage(myImage : MyImage) : void { 
    // remove markups 
    while (markupContainer.numChildren) { 
     markupContainer.removeChildAt(0); 
    } 
    // add markups 
    var markups : Array = markupsPerImage.getMarkups(myImage.id); 
    var markup : MarkupView; 
    foreach (markups as markup) { 
     markupContainer.addChild(markup); 
    } 
} 

참고 :

예제 코드는 모든 마크 업을 호스팅하는 마크 업 컨테이너를 가정합니다. 이 컨테이너에는 마크 업 맵에 대한 참조가 있어야합니다.

+0

@ Jens Struwe에게 도움을 주셔서 감사합니다. 정말 큰 도움이됩니다. –

+0

가끔 문제를 설명하거나 이해하기가 어렵습니다. 해피, 너를 도울 수있어. –

관련 문제