2015-04-24 3 views
1

У меня есть MKAnnotations настроен на карте, но я хотел бы изменить цвет аннотаций для разных сценариев. Есть ли способ изменить цвет аннотации?Как изменить цвет MKAnnation с помощью Swift?

Вот мой код ниже, как бы реализовать изменение цвета?

override func viewDidAppear(animated: Bool) { 
    var annotationQuery = PFQuery(className: "Post") 
    currentLoc = PFGeoPoint(location: MapViewLocationManager.location) 
    //annotationQuery.whereKey("Location", nearGeoPoint: currentLoc, withinMiles: 10) 
    annotationQuery.whereKeyExists("Location") 
    annotationQuery.findObjectsInBackgroundWithBlock { 
     (points, error) -> Void in 
     if error == nil { 
      // The find succeeded. 
      println("Successful query for annotations") 
      // Do something with the found objects 

      let myPosts = points as! [PFObject] 

      for post in myPosts { 
       let point = post["Location"] as! PFGeoPoint 
       let annotation = MKPointAnnotation() 
       annotation.coordinate = CLLocationCoordinate2DMake(point.latitude, point.longitude) 
       annotation.title = post["title"] as! String! 
       annotation.subtitle = post["username"] as! String! 


       self.mapView.addAnnotation(annotation) 
      } 

     } else { 
      // Log details of the failure 
      println("Error: \(error)") 
     } 
    } 
+0

Если вы реализуете любые методы делегата, убедитесь, что на выходе из делегатов вид карты в раскадровке подключен к просмотру иначе ваши методы-делегаты не будут вызваны. – Anna

ответ

4

Вы можете использовать пользовательские изображения для аннотации или использовать предопределенные MKPinAnnotationView с pinColor. Но pinColors ограничены красным, зеленым и фиолетовым.

Некоторые примеры:

import UIKit 
import MapKit 

class Annotation: NSObject, MKAnnotation 
{ 
    var coordinate: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0) 
    var custom_image: Bool = true 
    var color: MKPinAnnotationColor = MKPinAnnotationColor.Purple 
} 

class ViewController: UIViewController, MKMapViewDelegate { 

@IBOutlet weak var mapView: MKMapView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.mapView.delegate = self; 

    let annotation = Annotation.new() 
    mapView.addAnnotation(annotation) 

    let annotation2 = Annotation.new() 
    annotation2.coordinate = CLLocationCoordinate2D(latitude: 0.0, longitude: 1.0) 
    annotation2.custom_image = false 
    mapView.addAnnotation(annotation2) 

    let annotation3 = Annotation.new() 
    annotation3.coordinate = CLLocationCoordinate2D(latitude: 1.0, longitude: 0.0) 
    annotation3.custom_image = false 
    annotation3.color = MKPinAnnotationColor.Green 
    mapView.addAnnotation(annotation3) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { 
    if (annotation is MKUserLocation) { 
     return nil 
    } 

    var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) 
    if anView == nil { 
     if let anAnnotation = annotation as? Annotation { 
      if anAnnotation.custom_image { 
       let reuseId = "custom_image" 
       anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId) 
       anView.image = UIImage(named:"custom_image") 
      } 
      else { 
       let reuseId = "pin" 
       let pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) 
       pinView.pinColor = anAnnotation.color 
       anView = pinView 
      } 
     } 
     anView.canShowCallout = false 
    } 
    else { 
     anView.annotation = annotation 
    } 

    return anView 
} 
} 

Update: Набор делегат MAPview в viewDidLoad

+0

Я опробовал некоторые из нижеприведенных методов, но пеноглаз все равно не изменится. Я опубликовал свой текущий код выше в исходном сообщении. – Zach

+0

Опубликовать «func mapView» (mapView: MKMapView !, viewForAnnotation аннотация: MKAnnotation!) -> MKAnnotationView! 'Метод также –

+0

как правильно реализовать метод viewForAnnotation в моем коде, вышедшем выше? Он не хочет поворачивать цвет штыря зеленым или фиолетовым. – Zach

Смежные вопросы