2012-02-25 1 views
2

사용자 정의 컬러 서클 주석 안에 숫자를 그릴 수있었습니다 (this 기준). 내 맞춤 주석 클래스에 대한 최적화를 만들고 싶습니다. 재사용에 대해 읽었습니다. 내 문제는 내가 재사용 할 수있는 물건을 만들면 주석보기가지도에 섞여 큰 문제가되는 것입니다. 사용자 정의 된 주석 뷰를 다시 사용할 수 없습니까? 아니면 어떻게 든 뷰의 주석에 관련이 있습니까? 제 말은 주석에 그려지는 숫자를 저장한다는 것입니다. 사실 주석과 주석 사이에는 1to1 관계가 있습니다. 사용자 정의 annotationview의 init :맞춤형 특수 효과 뷰 재사용

-(id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier imageType:(int)imageType { 

    self = [super initWithAnnotation: annotation reuseIdentifier: reuseIdentifier]; 
    if (self != nil) 
    { 
     if ([annotation isKindOfClass:[CircleMarker class]]) 
     { 
      // custom annotation class with some extra fields 
      CircleMarker * clm = (CircleMarker *)annotation; 
      self.locationMarker = clm; 

      // ... setting frame and other stuff 

      self.image = [self getImage]; /* this method DRAWS image based on clm */ 
      self.canShowCallout = NO;   
     } 
... 
} 

그리고 대리인 : 여기

내 관련 코드입니다

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{ 
    static NSString *reuseId_small = @"smallcircle"; 
    static NSString *reuseId_big = @"bigcircle"; 
    CircleAnnotationView * nca = nil;  
    if ((int)[self.mapView getZoomLevel] < ZOOM_LEVEL_FOR_NUMBERS) 
     { 
     nca = (CircleAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:reuseId_small]; 
     if (nca == nil) 
      nca = [[[CircleAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId_small imageType:2] autorelease]; 
     } 
     else 
     { 
     nca = (CircleAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:reuseId_big]; 
     if (nca == nil) 
      nca = [[[CircleAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId_big imageType:1] autorelease]; 
     } 
return nca; 
} 

내가 정의 drawRect 기능으로 self.image = 부품을 교체하려고했습니다,하지만 결과는 같았다.

감사합니다.

+0

또는 내부에 가서 내가 배경에서 그려진 숫자를 분리해야 볼

https://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKAnnotationView_Class/Reference/Reference.html

? – Templar

답변

2

MKAnnotationView가 대기열에서 제외 될 때 prepareForReuse에 대한 호출이 있습니다. 이 방법에서는 내용을 다시 그려야하는지 확인할 수 있습니다. 나는이 만 컬러 원 (원의 배경) 재사용 할 수 이러한 경우에, 당신의 CircleAnnotationView 코드

+0

그래, 아마도 이것이 최고의 대답이다. 결국 공통 배경을 분리하여 재사용 할 수있게되었으므로 재사용 가능한 서클에 투명한 원에 내용을 그립니다. 어쨌든 고마워. – Templar