こんにちは、リンゴのリマインダー アプリのように、注釈の周りにオーバーレイを作成しようとしています。オーバーレイを表示するために使用する必要があると思われる MKCircle オブジェクトを既に作成していますが、MKCircle オブジェクトを MKOVerlay オブジェクトに変換するにはどうすればよいですか? 注釈を追加するより良い方法はありますか?私はswiftとプログラミングが初めてです。助言がありますか?
1 に答える
4
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")
}
}
于 2017-07-05T20:31:14.193 に答える