【问题标题】:Quickly adding single pin to MKMapView?快速将单个引脚添加到 MKMapView?
【发布时间】:2012-04-11 03:00:30
【问题描述】:

我有一个 GPS 坐标(纬度、经度),我很快想在 MKMapView 上放置一个大头针来显示该位置。一切正常,但由于我只需要一个没有标注的大头针,有没有更快的方法来做到这一点,或者我有什么需要做的?

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id < MKAnnotation >)annotation {
    MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"DETAILPIN_ID"];
    [pinView setAnimatesDrop:YES];
    [pinView setCanShowCallout:NO];
    return pinView;
}

注意:我不需要检查可重复使用的注释视图,因为我只使用图钉来显示详细视图中的位置(在下次请求详细视图时将其销毁并重新创建)。

【问题讨论】:

    标签: iphone objective-c cocoa-touch mkmapview


    【解决方案1】:

    不要使用-mapView:viewForAnnotation: 方法,只需将MKPointAnnotation 的代码放入您的-viewDidLoad 方法即可。它不会为水滴设置动画,但非常简单。

    // Place a single pin
    MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
    [annotation setCoordinate:centerCoordinate];
    [annotation setTitle:@"Title"]; //You can set the subtitle too
    [self.mapView addAnnotation:annotation];
    

    Swift 版本:

    let annotation = MKPointAnnotation()
    let centerCoordinate = CLLocationCoordinate2D(latitude: 41, longitude:29)
    annotation.coordinate = centerCoordinate
    annotation.title = "Title"
    mapView.addAnnotation(annotation)
    

    【讨论】:

    • 是否可以为 MKPointAnnotation 的下降设置动画?
    • 您无法轻松地为水滴设置动画。如果您想要动画,请使用mapView:viewForAnnotation: 委托方法。
    【解决方案2】:

    您可以像这样设置点和区域:

    CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(lat, lon);
    
    MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1);
    MKCoordinateRegion region = {coord, span};
    
    MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
    [annotation setCoordinate:coord];
    
    [self.staticMapView setRegion:region];
    [self.staticMapView addAnnotation:annotation];
    

    【讨论】:

      【解决方案3】:

      你可以像这样添加它:

          mapView.mapType = MKMapType.standard
      
          let location = CLLocationCoordinate2D(latitude: 23.0225,longitude: 72.5714)
      
          let span = MKCoordinateSpanMake(0.05, 0.05)
          let region = MKCoordinateRegion(center: location, span: span)
          mapView.setRegion(region, animated: true)
      
          let annotation = MKPointAnnotation()
          annotation.coordinate = location
          annotation.title = "Javed Multani"
          annotation.subtitle = "Surat, India"
          mapView.addAnnotation(annotation)
      

      看起来像:

      【讨论】:

        【解决方案4】:

        在 MKMapView 中添加 pin 的 Swift 版本:

        func addPin() {
            let annotation = MKPointAnnotation()
            let centerCoordinate = CLLocationCoordinate2D(latitude: 20.836864, longitude:-156.874269)
            annotation.coordinate = centerCoordinate
            annotation.title = "Lanai, Hawaii"
            mapView.addAnnotation(annotation)
        }
        

        聚焦区域或大头针的 Swift 版本

        func focusMapView() {
            let mapCenter = CLLocationCoordinate2DMake(20.836864, -156.874269)
            let span = MKCoordinateSpanMake(0.1, 0.1)
            let region = MKCoordinateRegionMake(mapCenter, span)
            mapView.region = region
        }
        

        要了解更多详情,请访问“Load MKMapView using Swift”。

        【讨论】:

          【解决方案5】:

          删除图钉并在地图视图中显示当前位置的最简单和最简单的方法是在 viewDidLoad 方法中添加此代码。 (假设您已经获取了用户的当前位置)。

          NSString *display_coordinates=[NSString stringWithFormat:@"Latitude is %f and Longitude is %f",coordinate.longitude,coordinate.latitude];
          
          MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
          [annotation setCoordinate:coordinate];
          [annotation setTitle:@"Click Labs"];            
          [annotation setSubtitle:display_coordinates];
          [mapView addAnnotation:annotation];
          

          【讨论】:

            【解决方案6】:

            由于您想为下拉设置动画,您需要像您所做的那样实现viewForAnnotation,因为该属性默认为NO

            如果您不需要为 drop 设置动画,您可以完全消除 viewForAnnotation 方法实现并禁用标注,而是在添加注解时将注解的 title 设置为 nil 或空白。

            如果您确实需要图钉放置动画并且还显示用户的位置(蓝点),您还需要在viewForAnnotation 中检查MKUserLocation 并返回nil

            否则,您可以删除整个viewForAnnotation 方法,默认的红色图钉将显示为没有动画,如果title 不为空,则标注将显示,并且用户位置将显示为蓝点。

            【讨论】:

            • 这很好,我确实尝试不实现 viewForAnnotation 但我没有意识到我的标题和副标题都指向 NSStrings。我并没有过分依赖针落,但我认为现在它会保持原样。非常感谢您的回答,非常有帮助,当然我以后会用到。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-08-19
            • 2020-06-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多