2011-09-18 4 views
3

내 맵킷 주석에 맞춤 이미지를 사용하고 있습니다. 그러나 내가 커스텀 이미지를 사용하는 주된 문제는, 줌 아웃했을 때, 주석이 맵상의 정확한 포인트에 있지 않다는 것인데, 모든 것을 아래로 확대 할 때까지는 주석 지점을 올바른 위치에 두십시오. 정상적인 핀 MKPinAnnotationView을 사용하면 정상적으로 작동하는 것처럼 보이며 올바른 위치에있는 핀이 확대되거나 축소되어 도움이 될 수있는 사람에게 미리 감사드립니다.iOS MapKit 주석, 정확한 위치가 표시되지 않음

- (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 

NSLog(@"welcome into the map view annotation"); 

if ([annotation isKindOfClass:[MKUserLocation class]]) 

return nil; 

MKAnnotationView *pprMapNote = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pprMapNote"]; 


pprMapNote.image = [UIImage imageNamed:[NSString stringWithFormat:@"GPS_note.png"]]; 

pprMapNote.canShowCallout = YES; 
pprMapNote.centerOffset = CGPointMake(-21,-60); 
pprMapNote.calloutOffset = CGPointMake(0, 0); 
//[pprMapNote addSubview:pprMapNoteImg]; 

UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
[rightButton addTarget:self 
       action:@selector(showDetail) 
     forControlEvents:UIControlEventTouchUpInside]; 
pprMapNote.rightCalloutAccessoryView = rightButton; 

//remember to write in conditional for the different icons that should be loaded based on location 

UIImageView *pprNoteLocIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"loc_icon_casino.png"]]; 
pprMapNote.leftCalloutAccessoryView = pprNoteLocIcon; 
[pprNoteLocIcon release]; 

return pprMapNote; 

} 

답변

8

을 당신은 주석 뷰의 centerOffset을 설정하고 다음과 같이

내가 사용한 코드입니다.

이 오프셋은 이 아니고이 줌 레벨로 조정됩니다. 축소하면 더 멀리있는 좌표에서 이미지가 나타납니다.

기본값이 MKPinAnnotationView 인 경우 centerOffset은 기본값 0,0의 상태로 유지되며 핀 이미지는 핀의 하단 점이 좌표에 오도록 설계됩니다. 따라서 더 멀리 확대하면 핀 이미지가지도 아래로 상대적으로 커지는 것처럼 보이지만 핀의 아래쪽이 여전히 좌표를 가리키고 있습니다.

centerOffset을 설정할 필요가 없도록 이미지를 기준으로 centerOffset을 조정하거나 이미지를 수정해야합니다. 또는 centerOffset의 설정을 주석 처리하십시오. 필요하지 않을 수도 있습니다.


다른 어떤 관련이없는 항목 : 당신은 주석보기 다시 사용할 수 있도록 dequeueReusableAnnotationViewWithIdentifier를 사용한다

    • 당신은 (오토 릴리즈를 추가)를 pprMapNote ALLOC + 초기화에 대한 메모리 누수가. 대신 콜 아웃 버튼을 누른에 대한 자신의 메소드를 호출하는 addTarget를 사용
    • , 그것은 위의 세 점의 예 this answer를 참조지도보기 자신의 대리자 메서드를 calloutAccessoryControlTapped

    를 사용하는 것이 훨씬 낫다.

  • +0

    감사합니다. 안나, 그것을 시도합니다! –

    3

    핀은 별도의보기로 그려 지므로보기의 상태에 따라 확대/축소되지 않습니다.

    사용자 정의 핀 이미지의 크기를 수동으로 설정해야합니다. 이 작업은 centerOffset을 사용하여 쉽게 수행 할 수 있습니다. 대부분의 경우 프레임 높이를 이미지 크기의 절반으로 설정하면 충분합니다. 이미지가 프레임에 완전히 채워 지므로이 프레임 크기 (높이)를 쉽게 사용할 수 있습니다.

    aView.image = [UIImage imageNamed ... ]; 
        aView.centerOffset = CGPointMake(0,-aView.frame.size.height*0.5); 
    
    +0

    이렇게하면 문제가 해결됩니다. –