使用 MKPointAnnotation 的自定义注释
Custom Annotation Using MKPointAnnotation
这就是我想要做的:
对将填充地图的所有位置使用单个自定义注释。我已将自定义图像保存在资产中,但无法使其正常工作。
我的代码如下:
ViewDidLoad()
if let locationDict = snap.value as? Dictionary<String, AnyObject> {
let lat = locationDict["LATITUDE"] as! CLLocationDegrees
let long = locationDict["LONGITUDE"] as! CLLocationDegrees
let title = locationDict["NAME"] as! String
let center = CLLocationCoordinate2D(latitude: lat, longitude: long)
_ = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.10, longitudeDelta: 0.10))
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2DMake(lat, long)
annotation.title = title.capitalized // if you need title, add this line
self.mapView.addAnnotation(annotation)
}
对将填充地图的所有位置使用单个自定义注释。我已将自定义图像保存在资产中,但无法使其工作(viewDidLoad 中的详细信息)
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
var annotationView: MKAnnotationView?
if annotation.isKind(of: MKUserLocation.self) {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "User")
annotationView?.image = UIImage(named: "icon")
}
return annotationView
}
您应该实现委托方法:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation.isKind(of: MKUserLocation.self) {
let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "User")
annotationView.image = UIImage(named: "icon")
return annotationView
}
let reuseId = "Image"
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
if annotationView == nil {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
annotationView?.canShowCallout = true
annotationView?.image = UIImage(named: "<<image name>>")
}
else {
annotationView?.annotation = annotation
}
return annotationView
}
你应该像这样实现委托方法。
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil
}
var pinView : MKAnnotationView? = nil
let identifer = "pin"
pinView = mapView .dequeueReusableAnnotationView(withIdentifier: identifer)
if pinView == nil {
pinView = MKAnnotationView.init(annotation: annotation, reuseIdentifier: identifer)
}
pinView?.canShowCallout = true
pinView?.calloutOffset = CGPoint(x: -5, y: 5)
pinView?.rightCalloutAccessoryView = UIButton.init(type: .detailDisclosure) as UIView
let type = (annotation as! CustomAnnotation).type
if type == -1 {
pinView?.image = UIImage(named: "Img_gray_pin")?.resized(toWidth: 20)
} else if type == 0 {
pinView?.image = UIImage(named: "Img_gray_pin")?.resized(toWidth: 20)
} else if type == 1{
pinView?.image = UIImage(named: "Img_blue_pin")?.resized(toWidth: 20)
} else if type == 2 {
pinView?.image = UIImage(named: "Img_orange_pin")?.resized(toWidth: 25)
} else if type == 3 {
pinView?.image = UIImage(named: "Img_red_pin")?.resized(toWidth: 30)
} else {
pinView?.image = UIImage(named: "Img_gray_pin")?.resized(toWidth: 20)
}
return pinView
}
然后创建CustomAnnotationClass
import MapKit
import UIKit
class CustomAnnotation: NSObject, MKAnnotation {
let title: String?
let subtitle: String?
let coordinate: CLLocationCoordinate2D
let tag : Int
let type : Int
init(title: String, address: String, coordinate: CLLocationCoordinate2D, tag : Int, type : Int) {
self.title = title
self.subtitle = address
self.coordinate = coordinate
self.tag = tag
self.type = type
super.init()
}
}
这就是我想要做的:
对将填充地图的所有位置使用单个自定义注释。我已将自定义图像保存在资产中,但无法使其正常工作。
我的代码如下:
ViewDidLoad()
if let locationDict = snap.value as? Dictionary<String, AnyObject> {
let lat = locationDict["LATITUDE"] as! CLLocationDegrees
let long = locationDict["LONGITUDE"] as! CLLocationDegrees
let title = locationDict["NAME"] as! String
let center = CLLocationCoordinate2D(latitude: lat, longitude: long)
_ = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.10, longitudeDelta: 0.10))
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2DMake(lat, long)
annotation.title = title.capitalized // if you need title, add this line
self.mapView.addAnnotation(annotation)
}
对将填充地图的所有位置使用单个自定义注释。我已将自定义图像保存在资产中,但无法使其工作(viewDidLoad 中的详细信息)
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
var annotationView: MKAnnotationView?
if annotation.isKind(of: MKUserLocation.self) {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "User")
annotationView?.image = UIImage(named: "icon")
}
return annotationView
}
您应该实现委托方法:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation.isKind(of: MKUserLocation.self) {
let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "User")
annotationView.image = UIImage(named: "icon")
return annotationView
}
let reuseId = "Image"
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
if annotationView == nil {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
annotationView?.canShowCallout = true
annotationView?.image = UIImage(named: "<<image name>>")
}
else {
annotationView?.annotation = annotation
}
return annotationView
}
你应该像这样实现委托方法。
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil
}
var pinView : MKAnnotationView? = nil
let identifer = "pin"
pinView = mapView .dequeueReusableAnnotationView(withIdentifier: identifer)
if pinView == nil {
pinView = MKAnnotationView.init(annotation: annotation, reuseIdentifier: identifer)
}
pinView?.canShowCallout = true
pinView?.calloutOffset = CGPoint(x: -5, y: 5)
pinView?.rightCalloutAccessoryView = UIButton.init(type: .detailDisclosure) as UIView
let type = (annotation as! CustomAnnotation).type
if type == -1 {
pinView?.image = UIImage(named: "Img_gray_pin")?.resized(toWidth: 20)
} else if type == 0 {
pinView?.image = UIImage(named: "Img_gray_pin")?.resized(toWidth: 20)
} else if type == 1{
pinView?.image = UIImage(named: "Img_blue_pin")?.resized(toWidth: 20)
} else if type == 2 {
pinView?.image = UIImage(named: "Img_orange_pin")?.resized(toWidth: 25)
} else if type == 3 {
pinView?.image = UIImage(named: "Img_red_pin")?.resized(toWidth: 30)
} else {
pinView?.image = UIImage(named: "Img_gray_pin")?.resized(toWidth: 20)
}
return pinView
}
然后创建CustomAnnotationClass
import MapKit
import UIKit
class CustomAnnotation: NSObject, MKAnnotation {
let title: String?
let subtitle: String?
let coordinate: CLLocationCoordinate2D
let tag : Int
let type : Int
init(title: String, address: String, coordinate: CLLocationCoordinate2D, tag : Int, type : Int) {
self.title = title
self.subtitle = address
self.coordinate = coordinate
self.tag = tag
self.type = type
super.init()
}
}