Наложение вокруг аннотации
Привет! Я пытаюсь создать оверлей вокруг своих аннотаций, например приложение напоминаний о яблоках. Я уже создал объект MKCircle, который, как мне кажется, следует использовать для отображения наложения, но как мне преобразовать мой объект MKCircle в объект MKOVerlay? может быть, есть лучший способ добавить аннотации? Я новичок в Swift и программировании. Какие-либо предложения?
1 ответ
MKCircle
это MKOverlay
объект. Вам просто нужно добавить его в качестве наложения:
let circle = MKCircle(center: coordinate, radius: 1000)
mapView.add(circle)
Конечно, вы должны указать карте, как ее визуализировать, реализовав mapView(_:rendererFor:)
в вашем делегате и создать экземпляр MKCircleRenderer
для MKCircle
это прошло как наложение.
extension ViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
let renderer = MKCircleRenderer(overlay: overlay)
renderer.fillColor = UIColor.cyan.withAlphaComponent(0.5)
renderer.strokeColor = UIColor.cyan.withAlphaComponent(0.8)
return renderer
}
}
Ясно, что вы указали delegate
для тебя MKMapView
, тоже. И если у вас есть другие типы средств визуализации, вы можете реализовать специальную логику для них, например,
extension ViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if let circle = overlay as? MKCircle {
let renderer = MKCircleRenderer(circle: circle)
renderer.fillColor = UIColor.cyan.withAlphaComponent(0.5)
renderer.strokeColor = UIColor.cyan.withAlphaComponent(0.8)
return renderer
}
if let polygon = overlay as? MKPolygon {
let renderer = MKPolygonRenderer(polygon: polygon)
renderer.fillColor = UIColor.blue.withAlphaComponent(0.5)
renderer.strokeColor = UIColor.blue.withAlphaComponent(0.8)
return renderer
}
if let polyline = overlay as? MKPolyline {
let renderer = MKPolylineRenderer(polyline: polyline)
renderer.fillColor = UIColor.red.withAlphaComponent(0.5)
renderer.strokeColor = UIColor.red.withAlphaComponent(0.8)
return renderer
}
fatalError("Unexpected overlay type")
}
}