我需要显示圆形和多边形的地图,每个圆形或多边形可能是不同的颜色。
我最初的计划是继承MKCircle和MKPolygon,并为我的Region类添加一个实例变量(其中包含将确定地图上形状颜色的信息)但是不可能将这两个中的任何一个子类化为
有什么想法吗?
这是我到目前为止所做的:
// draw the regions
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if overlay is MKCircle {
// display circles on the map
let circle = MKCircleRenderer(overlay: overlay)
circle.strokeColor = UIColor.red // THIS SHOULD BE CONDITIONAL (sometimes red, sometimes green -> depends on a class that I have called region)
circle.fillColor = UIColor(red: 255, green: 0, blue: 0, alpha: 0.1)
circle.lineWidth = 1
return circle
} else if overlay is MKPolygon {
// display polygons on the map
let poly = MKPolygonRenderer(overlay: overlay)
poly.strokeColor = UIColor.red // THIS SHOULD BE CONDITIONAL (sometimes red, sometimes green -> depends on a class that I have called region)
poly.fillColor = UIColor(red: 255, green: 0, blue: 0, alpha: 0.1)
poly.lineWidth = 1
return poly
} else {
return MKPolylineRenderer()
}
}
答案 0 :(得分:0)
您说您能'吨子MKCircle或MKPolygon,所以你没有办法通过这个覆盖到在overlay
参数委托方法相关的额外信息
但可以做的是编写符合MKOverlay协议的自己的NSObject子类。现在您可以添加任何您喜欢的实例属性。为简单起见,您的MKOverlay采用者本身可以包装MKCircle或MKPolygon,但实际上并不需要这样做。
答案 1 :(得分:0)
我知道它是一个旧线程,但是我想我会分享我的操作方式
我使用扩展的存储属性来创建一个变量,该变量可以区分MKCircle是我需要的成员还是地方
这是示例代码:
extension MKCircle {
enum type {
case place
case member
}
private static var savedCircleType: type = .member
var circleType : type {
get{
return MKCircle.savedCircleType
}
set(newValue) {
MKCircle.savedCircleType = newValue
}
}
}
添加注释时,请执行此操作
let circle = MKCircle(center: currentLocationPin.coordinate, radius: 200)
circle.circleType = .member // or .place in my case
self.mapView.addOverlay(circle)
self.mapView.addAnnotation(currentLocationPin)
最后在MKMapView委托中
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if overlay is MKCircle {
let circleRenderer = MKCircleRenderer(overlay: overlay)
let color: UIColor = (circleRenderer.circle.circleType == .place) ? .themeGreen : .red
circleRenderer.strokeColor = color
circleRenderer.fillColor = color.withAlphaComponent(0.3)
circleRenderer.lineWidth = 2.0
return circleRenderer
} else {
return MKPolylineRenderer()
}
}