2

こんにちは、リンゴのリマインダー アプリのように、注釈の周りにオーバーレイを作成しようとしています。オーバーレイを表示するために使用する必要があると思われる MKCircle オブジェクトを既に作成していますが、MKCircle オブジェクトを MKOVerlay オブジェクトに変換するにはどうすればよいですか? 注釈を追加するより良い方法はありますか?私はswiftとプログラミングが初めてです。助言がありますか?

4

1 に答える 1

4

MKCircleMKOverlayオブジェクトです。オーバーレイとして追加するだけです:

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 に答える