2014-02-08 2 views
1

특정 순서로 표시하려는 MKCircle, MKPolygonMKPolyline 오버레이를 혼합했습니다. 이러한 오버레이는 항상 동시에 생성되는 것은 아니지만 생성 된 오버레이는 다른 오버레이 아래/위에 표시됩니다. 고정 인덱스에 MKMapView 오버레이

[self.mapview insertOverlay:example1 atIndex:6]; 

목록의 마지막에 오버레이를두고 있지만 순간이 오버레이가 아닌 경우 층 (6) 내가 그것을 올바른 층의에서 오버레이를 밀어 할 수 3.을받을 것으로 보인다

[self.mapview insertOverlay:example2 atIndex:5]; 

나는 example1 위에 있고 싶다. 그러나 그 사람이 3 이니까 example2가 맨 아래에있다.

오버레이가 만들어 졌는지 확인한 다음 배열을 만들고 모두 addOverlays으로 밀어 넣으십시오. 성능에 얼마나 많은 영향을 줄지 확실하지 않습니다.

어떻게 수행 할 수있는 영리한 방법입니까?

환호, 당신은 주석 또는 오버레이 더 구조화 된 관리를 필요로 할 때, 당신은 (하나는 jQuery과 데이터 소스를 관리 할 방법과 유사) 조직 모델을 표현하는 데이터 구조의 세트를 별도로 도입하는 것이 좋습니다

답변

1

을 tord . MKMapView의 도우미 객체 또는 하위 클래스가 작동 할 수 있습니다. 나는 이전을 더 좋아한다.

귀하의 경우에는 아마도 배열 배열이 작동 할 것입니다. 최상위 배열은 각 논리적 "계층"을 나타냅니다. 이 배열의 각 요소는 해당 레이어의 오버레이 배열입니다. 이러한 데이터 구조는 MKMapView 객체에 대한 약한 참조 또는 콘센트와 함께 도우미 클래스의 비공개 멤버로 소유되어야합니다. 오버레이 추가/제거 방법 제공 (예 : addOverlay:atLayer:removeOverlay: 또는 오버레이 배열을 허용하는 복수 변형이 있습니다. 헬퍼 클래스는 우선 주어진 오버레이를 적절한 "레이어"하위 배열에 추가합니다. 그런 다음 다른 레이어의 배열 수를 더함으로써 MKMapView에 보내는 insertOverlay:atIndex: 메시지에 사용할 올바른 색인 값을 계산할 수 있습니다.

성능이나 메모리 사용에 큰 타격이 없을 것이라고 생각합니다.

MKMapView의 하위 클래스 대신 별도의 도우미 클래스를 사용하거나보기 컨트롤러에 코드를 포함 시키면 여러보기 컨트롤러에서이를 쉽게 재사용 할 수 있으며 단위 테스트가 쉬울 수도 있습니다.