Swift – 将不同的图像从数组设置为注释引脚

我想知道如何在mapview上为注释引脚设置不同的图像。 以下问题之间的区别

viewForAnnotation混淆并迭代定制pinColor

Swift的不同图像

是我的图像数组是关于服务器响应动态生成的。 arrays没有固定的大小,因此开关/shell结构不是一个好主意。 此外,我不确定如何应用上述主题中提到的自定义类的解决方案。 我知道最好在之前提出的一个问题上发表评论,但不幸的是,我现在太新手了(太少点)。

这是在显示map的函数内执行的for循环:

for var r=0;r<arrayOfRestaurants.count;r++ { var summonRestaurant:NSDictionary = arrayOfRestaurants[r] as NSDictionary var nearbyRestaurant = Restaurant(nearbyRestaurants:summonRestaurant) var latRestaurant=(nearbyRestaurant.latitude as NSString).doubleValue var longRestaurant=(nearbyRestaurant.longitude as NSString).doubleValue var locationOfRestaurant = CLLocationCoordinate2D( latitude: latRestaurant as CLLocationDegrees, longitude: longRestaurant as CLLocationDegrees) var lunchArray: NSArray = nearbyRestaurant.lunch as NSArray var annotation = MKPointAnnotation() annotation.setCoordinate(locationOfRestaurant) annotation.title = nearbyRestaurant.name + " " + nearbyRestaurant.distance + " km" map.addAnnotation(annotation) } 

这里是viewForAnnotation委托方法(与上述线程中使用的方法完全相同):

 func mapView(map: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { if annotation is MKUserLocation { //return nil so map view draws "blue dot" for standard user location return nil } let reuseId = "pin" var pinView = map.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView if pinView == nil { pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) pinView!.canShowCallout = true pinView!.animatesDrop = true pinView!.pinColor = .Purple pinView!.image = globalImageArray[0] } else { pinView!.annotation = annotation } return pinView } 

正如你所看到的,我为pinView分配了一个特定的图像,它是globalImageArray [0],但是我找到了一个解决方案,让我遍历globalImageArray并为每个引脚分配一个特定的图像。

我很乐意接受任何帮助,提前谢谢!

首先,您需要创建自己的类,为您的注释采用MKAnnotation协议 –

 class RestaurantAnnotation : NSObject, MKAnnotation { var coordinate: CLLocationCoordinate2D var title: String var subtitle: String var image: UIImage? init(coordinate: CLLocationCoordinate2D, title: String, subtitle: String) { self.coordinate = coordinate self.title = title self.subtitle = subtitle } } 

然后,在添加注释并设置图像时使用此类的实例 –

 for var r=0;r 

现在,在您的注释视图中,您可以访问图像 -

 func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { if !(annotation is RestaurantAnnotation) { return nil } let reuseId = "restaurant" var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) if anView == nil { anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId) anView.canShowCallout = true } else { anView.annotation = annotation } let restaurantAnnotation = annotation as RestaurantAnnotation if (restaurantAnnotation.image != nil) { anView.image = restaurantAnnotation.image! anView.image.layer.setCornerRadius(8.0) anView.image.layer.clipsToBounds=true } else { // Perhaps set some default image } return anView }