我的swift应用程序上有很多注释。如何才能在当前可见的地图区域上显示注释?

时间:2017-12-21 08:09:11

标签: swift mkmapview mkannotationview

我正在尝试制作优步克隆,其中有很多乘客和司机的注释。我只想加载并显示属于当前显示的地图区域的注释,这样所有注释都不会添加到mapview中,也不会占用太多内存。

我有两种注释:司机和乘客。我的注释有不同的图像。

以下是我尝试这样做的方法:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
      if let annotation = annotation as? DriverAnnotation {
          guard let dequeuedDriverAnnotation = mapView.dequeueReusableAnnotationView(withIdentifier: "driver") else {
              let driverAnnotation = MKAnnotationView(annotation: annotation, reuseIdentifier: "driver")
                  driverAnnotation.image = UIImage(named: "driverAnnotation")
                  return driverAnnotation
              }
              dequeuedDriverAnnotation.annotation = annotation
              return dequeuedDriverAnnotation
          } else if let annotation = annotation as? PassengerAnnotation {
                guard let dequeuedPassengerAnnotation = mapView.dequeueReusableAnnotationView(withIdentifier: "passenger") else {
                    let passengerAnnotation = MKAnnotationView(annotation: annotation, reuseIdentifier: "passenger")
                    passengerAnnotation.image = UIImage(named: "currentLocationAnnotation")
                    return passengerAnnotation
                }
                dequeuedPassengerAnnotation.annotation = annotation
                return dequeuedPassengerAnnotation
          } 
          return nil
     }
}

1 个答案:

答案 0 :(得分:0)

如何定义函数以检查注释是否属于当前显示的地图区域,如果超出区域,则尝试返回nil。

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
  if !visibleMapRegion(annotation) {
      return nil
  }
  ...

要定义此功能,请参阅: