2012-02-01 5 views
4

MKMap이 있는데 그 중 모두 빨간색입니다. 내가 IB와 파란색에 빨간색에서 MKAnnotation을 변경하는 "쇼 사용자 위치"를 선택, 내 viewForAnnotation 방법의 코드를 가지고 :MKUserLocation 파란색 userLocation MKAnnotation 실수로 터치 한 경우 앱이 손상됩니다.

if (annotation == theMap.userLocation) 
    return nil; 

모든 좋은 앱이 잘 작동하지만 사용자의 경우 실수로 나는 위의 코드를 제거하면

2012-02-01 20:43:47.527 AusReefNSW[27178:11603] -[MKUserLocationView setPinColor:]: unrecognized selector sent to instance 0x79b0720 
2012-02-01 20:43:47.528 AusReefNSW[27178:11603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MKUserLocationView setPinColor:]: unrecognized selector sent to instance 0x79b0720' 
*** First throw call stack: 

은 모두 잘 작동하지만 핀이 빨간색 : 나는 다음과 같은 충돌을 얻을 블루 userlocation 점을 두 드린다. 나는 푸른 아이콘을 가지고있는 것을 좋아하지 만, 아직 그 충돌이 왜 발견되지 않았다. 어떤 아이디어라도 감사 할 것입니다. 감사.

해결! Marvin에게 감사 드리며 코드를 사용하면 누구나 유용하다는 것을 알 수 있습니다. 간단히 말해, 먼저 MKAnnotation이 MyAnnotation Class 또는 MKUserLocation 클래스인지 확인해야했습니다. 현재 사용자의 위치에 대한

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKPinAnnotationView *)view 
{ 
theAnnotationSelected = [[mapView selectedAnnotations] objectAtIndex:0]; 
if ([theAnnotationSelected isKindOfClass:[MyAnnotation class]]) 
{ 
view.pinColor = MKPinAnnotationColorGreen; 

} 
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKPinAnnotationView *)view 
{ 
if ([theAnnotationSelected isKindOfClass:[MyAnnotation class]]) 
{ 
view.pinColor = MKPinAnnotationColorRed; 
} 

답변

20

MKMapView 속성에 가서에 선택을 XIB에서 사용자 위치를 표시합니다.

다음 controller..and에 MKMapViewDelegate을 구현 컨트롤러

-(MKAnnotationView *)mapView:(MKMapView *)pmapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    if ([annotation isKindOfClass:[MKUserLocation class]]) 
     return nil; //return nil to use default blue dot view 

    if([annotation isKindOfClass:[MKAnnotationClass class]]) 
    { 
     //Your code 
    } 
} 

이 메소드를 작성하고이

- (void)mapView:(MKMapView *)mapView1 didSelectAnnotationView:(MKAnnotationView *)customAnnotationView 
{ 

    if(![annotation isKindOfClass:[MKUserLocation class]]) 
    { 
      //Your code 
    } 

} 

당신은

+0

내 문제는 달랐지만 여기서 끝났습니다. 이 대답의 첫 부분이 나를 도왔다. 코드를 통해 모든 작업을 올바르게하고 있었지만 스토리 보드에서 생성 된 mapView 객체에 "사용자 위치 표시"가 표시되지 않았습니다. 아마 이것은 다른 누군가를 도울 것입니다! –

8

그런 다음 다음을 수행

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{ 

에 주석의 클래스를 확인하는 것이 좋습니다 ..

id *annotation = view.annotation; 
    if (![annotation isKindOfClass:[MKUserLocation class]]) { 
//Normal Code here 
} 
+0

굉장한 코드입니다. 계속 도와주세요! – user40910

+1

'id'는 이미 포인터이므로'id * annotation'은'id annotation' 또는'id annotation' (별표 없음)이어야합니다. – Anna

1
.. 사용자 위치에 파란색 점을 볼이 수 사용

이 솔루션은 콜 아웃보기를 억제하기 위해 iOS7에서 작동하지만 사용자가 파란색 점을 선택하는 것을 중지하지 않습니다. How to suppress the "Current Location" callout in map view

나는 현재 위치 점의 선택을 비활성화하는 방법을 아직 찾지 못했습니다.

"해결 방법"과 같이 많은 해결 방법이 아니지만 탭을 찍을 때 특정 유형의 주석에 초점을 맞추기 위해지도를 확대합니다. 사용자가 바로 위에있는 경우 확대/축소를 사용하면 파란색 점과 주석 사이에 약간의 거리를두고 쉽게 탭할 수 있습니다.

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { 

if([view.annotation isKindOfClass:[SpecialClass class]]){ 

    SpecialClass *cluster = (SpecialClass *)view.annotation; 
    if(testCriteria){ 
     [self.mapView setRegion:MKCoordinateRegionMakeWithDistance(cluster.coordinate, cluster.radius, cluster.radius) animated:YES]; 
    } 
} 
1

사용자가 MKUserlocation "blue dot"을 탭하면 응용 프로그램이 중단되는 것과 같은 문제가있었습니다. 나는 Ching-Lan 'digdog'HUANG의 DDAnnotation을 사용하고 있습니다. 내가 찾은 해결책은

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{ 
id annotation = view.annotation; 
    if (![annotation isKindOfClass:[MKUserLocation class]]) { 
//Your Annotation Code here 
} 
} 
관련 문제