2011-05-20 72 views
7

我正在iPhone应用程序的MapView中开发自定义引脚。 下面是代码:在iPhone中显示用户位置蓝点MKMapView

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    static NSString *AnnotationViewID = @"annotationViewID"; 

    MKAnnotationView *annotationView = (MKAnnotationView *)[myMapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID]; 

    if (annotationView == nil) 
    { 
     annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease]; 
    } 

    if ([[annotation title] isEqualToString:NSLocalizedString(@"Current Location",@"")]) { 

     MKPinAnnotationView *pin = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease]; 
     //pin.pinColor = MKPinAnnotationColorRed; 
     annotationView = pin; 
    } 
    else 
    { 
     NSString *pin = [NSString stringWithFormat:@"pin%i.png",[[annotation imgNumber] intValue]]; 
     annotationView.image = [UIImage imageNamed:pin];//Canviar la chincheta per numero 
     UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     [annotationView setRightCalloutAccessoryView:button]; 
     annotationView.annotation = annotation; 
     annotationView.canShowCallout = YES; 

    /********* Imagen a la izquierda en la burbuja *********/ 
    annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    // Set up the Left callout 
    UIButton *myDetailButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    myDetailButton.frame = CGRectMake(0, 0, 23, 23); 
    myDetailButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
    myDetailButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; 

    // Set the image for the button 
    //[myDetailButton setImage:[UIImage imageNamed:@"botocorreu.png"] forState:UIControlStateNormal]; 
    NSString *detailButton = [NSString stringWithFormat:@"%i",[[annotation imgNumber] intValue]]; 
    [myDetailButton setImage:[UIImage imageNamed:detailButton] forState:UIControlStateNormal]; 
    // Set the button as the callout view 
    annotationView.leftCalloutAccessoryView = myDetailButton; 
    annotationView.canShowCallout = YES; 
    } 
    return annotationView; 
    } 

这工作不错,但让我与红色的大头针用户的位置。 我检查IB中的“显示用户位置”。 我想使用默认的蓝色点,当用户移动时会自动移动它,不正确? 我该怎么做?

非常感谢。

回答

22

此添加到viewForAnnotation方法的顶部

if ([annotation isKindOfClass:[MKUserLocation class]]) 
    return nil; 

特殊用户的位置的注释是MKUserLocation类型的,并且在这种情况下返回nil告诉地图视图绘制默认视图它其是蓝点。

可以删除这些行,因为他们将不再需要:

if ([[annotation title] isEqualToString:NSLocalizedString(@"Current Location",@"")]) { 
    MKPinAnnotationView *pin = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease]; 
    //pin.pinColor = MKPinAnnotationColorRed; 
    annotationView = pin; 
} 
else 
+0

它的作品好,thnks。其中最重要的是显示用户位置的蓝色点,在他周围形成一个非常大的圈,是否可以成本高昂? – ValentiGoClimb 2011-05-21 15:22:58

+0

圆圈大小表示位置的精确度(更小意味着更准确)。不知道这是否可以使用CLLocationManager在MKMapView中进行控制。 – Anna 2011-05-21 16:15:24

+0

好吧。而且您知道如何通过代码手动引入userlocation。我需要把用户放在一个地方。 throat – ValentiGoClimb 2011-05-22 18:10:12

相关问题