我正在尝试在地图视图中添加自定义叠加层以创建倒圆(而不是地图上图钉周围的典型MKCircle叠加层)。我已经尝试过关注此主题:Add inverted circle overlay to map view
我还没有创建自定义的MKOverlay子类,但是我创建了一个自定义的MKOverlayRenderer子类,我试图将MKCircle用作MKOverlay。
class MKInvertedCircleRenderer: MKOverlayRenderer {
var fillColor: UIColor = UIColor.blue
override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) {
let path = UIBezierPath(rect: CGRect(x: mapRect.origin.x, y: mapRect.origin.y, width: mapRect.size.width, height: mapRect.size.height))
context.setFillColor(fillColor.cgColor)
context.addPath(path.cgPath)
context.fillPath()
}}
这是我在视图控制器中的mapView委托调用:
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
switch(overlaySegmentedControl.selectedSegmentIndex) {
case 0: // Draw circle on map view for region specified for "When I Arrive".
let circleRenderer = MKCircleRenderer(overlay: overlay)
circleRenderer.strokeColor = self.view.tintColor
circleRenderer.lineWidth = 3.0
circleRenderer.fillColor = self.view.tintColor.withAlphaComponent(0.15)
return circleRenderer
case 1: // Draw rectangle with circle cutout on map view for region specified for "When I Leave".
let circleRenderer = MKInvertedCircleRenderer(overlay: overlay)
return circleRenderer
default:
fatalError("Unspecified segmented control selected: \(overlaySegmentedControl.selectedSegmentIndex)")
}
}
目前,通过在地图视图上的引脚周围输出圆形覆盖,情况0按预期工作。
案例1不起作用,我期待它在地图上绘制一个矩形,填充我在MKOverlayRenderer子类中设置的fillColor - 但是没有任何显示。我想在添加路径以在中间切出圆圈之前对此进行故障排除。
任何帮助将不胜感激!
答案 0 :(得分:0)
事实证明,您不能将MKCircle与自定义MKOverlayRenderer子类一起使用。
您必须创建自己的自定义MKOverlay子类才能使用自定义MKOverlayRenderer子类。