azulceruleo
@azulceruleo (碧 あお)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Swift 初心者】マップ上に円を表示したい

解決したいこと

マップ上に円を表示したく、下記のサイトを参考にコードを書きました。
エラーなどは特にないのですが、円が表示されません。
https://faboplatform.github.io/SwiftDocs/3.mapkit/012_map/

他のサイトなども参考にしてみたのですが、いずれの場合も表示されませんでした。
何卒、ご教授よろしくお願い致します。

地図を表示するViewControllerのコード全文

import UIKit
import MapKit       //地図
import CoreLocation //位置情報

class MapViewController: UIViewController,CLLocationManagerDelegate,MKMapViewDelegate {

    @IBOutlet weak var mapView: MKMapView!
    @IBOutlet weak var decisionButton: UIButton!    //検索範囲決定ボタン
    
    var locationManager = CLLocationManager()
    
    var latitude: Double = 0.0   //Double型緯度プロパティ
    var longitude: Double = 0.0  //Double型経度プロパティ
    var s_latitude: String?      //Optional String型緯度プロパティ
    var s_longitude: String?     //Optional String型経度プロパティ
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        navigationItem.title = "半径を設定してください"                             //ナビゲーションコントローラのタイトル設定
        
        //地図の設定
        let center = CLLocationCoordinate2DMake(35.681236,139.767125)           //最初の中心座標
        let span = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)  //表示範囲
        let region = MKCoordinateRegion(center: center, span: span)             //中心座標と表示範囲をマップに登録する
        mapView.setRegion(region, animated: true)
       
        //現在地を取得
        locationManager.requestAlwaysAuthorization()
        locationManager.requestWhenInUseAuthorization()
        if CLLocationManager.locationServicesEnabled() {
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
            locationManager.startUpdatingLocation()
        }
        
       //円
        //円を描画する(半径1000m).
        let myCircle: MKCircle = MKCircle(center: center, radius: CLLocationDistance(1000))
        // mapViewに円を追加.
        mapView.addOverlay(myCircle)
    }
    
    //現在地を取得する許可を求めるためのメソッド
    func permission(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        switch status {
            
        case .notDetermined:                            //許可されてない場合
            manager.requestWhenInUseAuthorization()     //許可を求める
            
        case .restricted, .denied:                      //拒否されてる場合
            break                                       //何もしない
            
        case .authorizedAlways, .authorizedWhenInUse:   //許可されている場合
            manager.startUpdatingLocation()             //現在地の取得を開始
            break
            
        default:
            break
        }
    }

    //緯度経度
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        s_latitude = (locations.last?.coordinate.latitude.description)  //緯度取得
        s_longitude = (locations.last?.coordinate.longitude.description)//経度取得
        
        if let s_latitude = s_latitude {  //s_latitudeのアンラップ
            latitude = NSString(string: s_latitude).doubleValue //String型の緯度をDouble型に変換
            UserDefaults.standard.set(latitude, forKey: "lat")  //UserDefaultsに緯度を保存
        }
        
        if let s_longitude = s_longitude {  //s_longitudeのアンラップ
            longitude = NSString(string: s_longitude).doubleValue   //String型の経度をDouble型に変換
            UserDefaults.standard.set(longitude, forKey: "lon")     //UserDefaultsに経度を保存
        }
        mapView.setCenter((locations.last?.coordinate)!, animated: true)    //マップ中心位置の更新
    }
    
    //円の関数
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {

           // rendererを生成.
           let myCircleView: MKCircleRenderer = MKCircleRenderer(overlay: overlay)

           // 円の内部を赤色で塗りつぶす.
           myCircleView.fillColor = UIColor.red

           // 円周の線の色を黒色に設定.
           myCircleView.strokeColor = UIColor.black

           // 円を透過させる.
           myCircleView.alpha = 0.5

           // 円周の線の太さ.
           myCircleView.lineWidth = 1.5

           return myCircleView
       }
}

解決しました

MapView > Connection Inspector > Outlets > delegate にMapViewControllerを設定したところ、正常に円が表示されました。

0

No Answers yet.

Your answer might help someone💌