2013-05-01 1 views
1

초기로드시 특수 효과가 잘 표시됩니다. 그러나지도를 스크롤하면 모두 사라지고 코드는 viewForAnnotation 대리자 메서드의 다른 주석이 아니라 사용자 위치에만 호출됩니다.iOS Mapkit -지도 스크롤/확대/축소에서 주석이 사라집니다.

플롯 핀

-(void)viewDidLoad{ 
    ...Download Coordinates and Data from Web here... 
    [self.mapView addAnnotation:pin]; 
} 

위임 방법

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    //Player's Pin 
    if([annotation class] == MKUserLocation.class) { 
     return nil; 
    } 

    //Cluster Pin 
    if([annotation isKindOfClass:[REVClusterPin class]]){ 
     REVClusterPin *pin = (REVClusterPin *)annotation; 
     if([pin nodeCount] > 0){ 
      pin.title = @"___"; 

      MKAnnotationView *annotationView = (REVClusterAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"cluster"]; 

      if(!annotationView){ 
       annotationView = (REVClusterAnnotationView*) 
       [[REVClusterAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"cluster"]; 
      } 

      annotationView.image = [UIImage imageNamed:@"cluster.png"]; 

      [(REVClusterAnnotationView*)annotationView setClusterText: 
      [NSString stringWithFormat:@"%i",[pin nodeCount]]]; 

      annotationView.canShowCallout = NO; 
      return annotationView; 
     } 
    } 
    //Player Pin 
    if([annotation isKindOfClass:[ZEPointAnnotation class]]){ 
     ZEPointAnnotation *pin = (ZEPointAnnotation *)annotation; 
     MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"pin"]; 
     if(!annotationView){ 
      annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"]; 
     } 
     annotationView.canShowCallout = YES; 
     annotationView.draggable = NO; 

     ...Create Pin Data Here... 

     return annotationView; 
    } 
    return nil; 
} 
+0

다음 두 가지 관찰에도 불구하고 문제가 다른 곳에 있는지 궁금합니다. 이'viewForAnnotation' 메소드를 일시적으로 주석 처리하십시오. 사용자 위치 신호가 이제 작동합니까? – Rob

+0

그 밖의 것이 없다면'if ([annotation isKindOfClass : [MKUserLocation class]])'가 있어야합니다. equals 연산자를 사용하여'class'를 테스트하면 안됩니다. iOS가 백그라운드에서 수행 중일 수도있는 서브 클래 싱이 없다는 것을 확신하지 못했기 때문에 특히 그렇습니다. 나는 이것이 문제라고 생각하지 않는다. (마지막'return nil;에 이르기 때문에, 단지 관찰 일 뿐이다.) – Rob

+0

BTW,'dequeueReusableAnnotationViewWithIdentifier'가 이전에 릴리즈 된'MKAnnotationView'를 반환하는데 성공했다면, 개인적으로'if (! annotationView)'에서 개인적으로'annotationView.annotation = annotation;을 설정하는'else' 절을 제안합니다. – Rob

답변

0

제거 애니메이션. 그게 당신의 문제를 해결할 것입니다

관련 문제