gpt4 book ai didi

ios - 在 iOS map 上有条件地给 MKCircle 上色

转载 作者:行者123 更新时间:2023-11-28 07:52:07 31 4
gpt4 key购买 nike

我需要显示一个由圆形和多边形组成的 map ,每个圆形或多边形可能有不同的颜色。

我最初的计划是子类化 MKCircle 和 MKPolygon 并为我的 Region 类添加一个实例变量(其中包含将确定 map 上形状颜色的信息)但是不可能将其中任何一个子类化

有什么想法吗?

这是我目前所拥有的:

// 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()
}
}

最佳答案

我知道这是一个旧线程,但我想我会分享我是如何做到的

我使用扩展的存储属性来创建一个变量,该变量可以区分 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 委托(delegate)中

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()
}
}

结果: /image/ApH9I.jpg

关于ios - 在 iOS map 上有条件地给 MKCircle 上色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49368877/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com