当我继承MKMarkerAnnotationView
的子类时,我会在MarkerView下方免费获得这些漂亮的文本,显示标题和副标题。
当我继承MKAnnotationView
的子类时,我完全可以自由地呈现注释视图:
internal final class POIClusterView: MKAnnotationView {
override var annotation: MKAnnotation? {
willSet {
// render
let renderer = UIGraphicsImageRenderer(size: CGSize(width: 40, height: 40))
self.image = renderer.image { _ in
...
}
}
}
这很好。但是它不会像MKMarkerAnnotationView
下方显示标题和副标题。
如果我继承MKMarkerAnnotationView
并渲染自己的图像,则会在下面看到这些文本,但是MKMarkerAnnotationView
气泡会显示在我自己的图像上方。
我怎么都可以:渲染自己的图像并免费获得下面的文本?
最直接的想法可能是以某种方式关闭MKMarkerAnnotationView
气泡的呈现,但是我该怎么做?
答案 0 :(得分:0)
经过一些实验,我找到了一个简单的解决方案
// Inherit from MKMarkerAnnotationView to get the texts below the annotation for free
class POIMarkerClusterView: MKMarkerAnnotationView {
override var annotation: MKAnnotation? {
willSet {
if let cluster = newValue as? MKClusterAnnotation {
// set properties as usual
// MKMarkerAnnotationView renders title and subtitle in the callout view
// and below the image if and where there is space:
cluster.title = firstPoi.title
if sortedPOIs.count == 2 {
cluster.subtitle = sortedPOIs.last?.title
} else {
// default: MapKit shows something like "+2 more" and localizes it for us
}
// calculate statistics to render
// render own image
self.image = POIClusterImage(cityModel: cityModel, poiStatistics: poiStatistics, count: count)
// MKMarkerAnnotationView's default rendering usually hides our own image.
// so we make it invisible:
self.glyphText = ""
self.glyphTintColor = UIColor.clear
self.markerTintColor = UIColor.clear
}
}
}
}