【问题标题】:MKMapView current location showing as custom pinsMKMapView 当前位置显示为自定义图钉
【发布时间】:2011-09-23 05:24:55
【问题描述】:

我已经设置好让我的 MKMapView 显示当前位置。我还为其他引脚实现了一个自定义引脚。然而,事实证明当前位置显示为自定义图钉,而我只是希望它是一个普通的蓝色圆圈(就像谷歌地图一样)。

我在我的代码中定义了以下内容:

- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id<MKAnnotation>) annotation MKAnnotationView *pin = (MKAnnotationView *) [self.mapView dequeueReusableAnnotationViewWithIdentifier: @"VoteSpotPin"];
    if (pin == nil)
    {
        pin = [[[MKAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: @"TestPin"] autorelease];
    }
    else
    {
        pin.annotation = annotation;
    }

    [pin setImage:[UIImage imageNamed:@"TestPin.png"]];
    pin.canShowCallout = YES;
    pin.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    return pin;
}

如何防止当前位置显示为图钉?

【问题讨论】:

  • mapView.showsUserLocation=YES 然后它将显示当前位置。如果您想在当前位置显示图钉,请将当前位置 lat lon 传递给该注释;
  • 我这样做了,它将当前位置显示为我拥有的自定义图钉,而不是蓝色圆圈。这实际上是真正的问题
  • 您是否检查过您的应用程序是否支持设备或模拟器中的位置管理器问题

标签: iphone objective-c ipad mkmapview


【解决方案1】:

你需要实现这个:-

- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation:(id<MKAnnotation>) annotation
{        
    if (annotation == mapView.userLocation)
    {
       return nil;
    }
    else
    {
       MKAnnotationView *pin = (MKAnnotationView *) [self.mapView dequeueReusableAnnotationViewWithIdentifier: @"VoteSpotPin"];
       if (pin == nil)
       {  
          pin = [[[MKAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: @"TestPin"] autorelease];
       }
       else
       {
          pin.annotation = annotation;
       }           

       [pin setImage:[UIImage imageNamed:@"TestPin.png"]];
       pin.canShowCallout = YES;
       pin.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
       return pin;
    }
}

【讨论】:

  • 不知道 mapView.userLocation 也是一个注释。谢谢!很高兴知道这一点
【解决方案2】:

对于斯威夫特:

if annotation is MKUserLocation {
    return nil
}

【讨论】:

    【解决方案3】:
        - (MKAnnotationView *)mapView:(MKMapView *)mapViewTmp viewForAnnotation:(id<MKAnnotation>)annotation
        {
            if(annotation == mapView.userLocation)
                return nil;
             else
                {
    MKAnnotationView *pin = (MKAnnotationView *) [self.mapView dequeueReusableAnnotationViewWithIdentifier: @"VoteSpotPin"];
                if (pin == nil)
                {
    
                    pin = [[[MKAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: @"TestPin"] autorelease];
                }
                else
                {
                    pin.annotation = annotation;
                }
    
                [pin setImage:[UIImage imageNamed:@"TestPin.png"]];
                pin.canShowCallout = YES;
                pin.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                return pin;
            }
    
        }
    

    【讨论】:

      【解决方案4】:

      想要最简单的解决方案?只需将您的对象引脚从 MKAnnotationView 更改为 MKPinAnnotationView 它就会显示您想要的内容。

      【讨论】:

        【解决方案5】:
        mapView.delegate=self;
        
        
        
        MKCoordinateRegion myRegion;
        
        CLLocationCoordinate2D center;
        
        center.latitude=40.4000;//spean
        
        center.longitude=-3.6833;//firstLagi;//-5.345373;
        
        
        
        MKCoordinateSpan span;
        
        span.latitudeDelta=My_Span;
        span.longitudeDelta=My_Span;
        
        
        myRegion.center=center;
        myRegion.span=span;
        
        
        [mapView setRegion:myRegion animated:YES];
        
        
        
        NSMutableArray *locations=[[NSMutableArray alloc]init];
        
        CLLocationCoordinate2D location;
        Annotation *myAnn;
        
        
        
        
        allList=[[AllList alloc]init];
        
        
        
        
        for (int j = 0; j<[appDelegate.allListArray count]; j++)
        {
            cat=@"cat";
            myAnn=[[Annotation alloc]init];
        
            allList=[appDelegate.allListArray objectAtIndex:j];
        
            location.latitude=[allList.lati doubleValue];
            location.longitude=[allList.lagi doubleValue];
        
            myAnn.coordinate=location;
            myAnn.title=allList.name;
            //myAnn.subtitle=allList.type;
        
            [locations addObject:myAnn];
        
        
        }
        
        [self.mapView addAnnotations:locations];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多