2009-12-05 54 views
4

這是我的-mapView:viewForAnnotation方法,當我創建註釋視圖時會丟棄引腳。但是,當我設置mapView.showsUserLocation = YES;-viewDidLoad,我得到一個引腳下降在無限循環(預計 - 在模擬器),而不是正常的藍點。showsUserLocation在iPhone模擬器中返回pin而不是藍點

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{ 
    MKAnnotationView *anno = nil; 
    //create a pin annotation view 
MKPinAnnotationView *pin=[[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"]autorelease]; 

    [pin setPinColor:MKPinAnnotationColorRed]; 
    pin.animatesDrop=YES; 
    pin.canShowCallout = YES; 
    pin.calloutOffset = CGPointMake(-5, 5); 
    anno = pin; 
    return anno; 
} 

我怎樣才能讓它放下引腳並顯示藍點?

感謝

回答

23

非常簡單的修復,雖然不能確定這是否是做了正確的方式...

if (annotation == mapView.userLocation){ 
    return nil; //default to blue dot 
} 
+2

這是正確的方法。 – 2010-06-08 10:19:24

+0

你必須想知道*爲什麼*這是它的正確方法,但我們不能'setUserLocation' .... – chakrit 2012-04-11 10:55:34

0

到對方的回答相似,這裏的東西接近:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    NSString *annotationType = [NSString stringWithCString:object_getClassName(annotation)]; 
    if ([annotationType compare:@"NSKVONotifying_MKUserLocation"] == 0) 
     return nil; 
    ... 
} 

當然,使用類似的東西需要您自擔風險。如果蘋果決定改變這個名字,它明天可能會停止工作。

0

通常情況下,您會使用自己的註釋類來查找與註釋相關的信息。在這種情況下,只處理您自己的註釋,請使用類似

if ([annotation isKindOfClass:[MapLocation class]]) {} 
相關問題