前回までの問題点の修正
携帯上でアプリを実行してみると、以下の問題が発生した。
・ドラッグで地図上のカメラの位置を変更
→自己位置更新の際に呼ばれる関数が呼ばれ?、カメラが自己位置に戻る。
修正案
-
自己位置が更新されたと判定される精度を下げて対応。
現在設定している精度は以下の通り、再構精度
locationManager.desiredAccuracy = kCLLocationAccuracyBest
これを以下に変更し、更新される精度を100mとした。
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
結果は変わらず。 -
ドラッグが始まったタイミングで、カメラが自己位置に戻る処理を通らないようにする。
delegateを設定し、マップ上をタップした時に呼ばれる関数内に処理を記載
class ViewController: UIViewController,GMSMapViewDelegate
// ViewDidLoad
mapView.delegate = self
func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {
NSLog("タッチを検知しました。")
// To Do
}
ドラッグの時は呼ばれないので却下。
-
OnCameraMoveStarated
なる、カメラ位置が移動した時に呼ばれるメソッドがあることを発見
アンドロイドだけだった。 -
ちゃんとドラッグ開始を検出する関数も用意されてました。
func mapView(_ mapView: GMSMapView, willMove gesture: Bool){
NSLog("ドラッグを開始しました。")
// Todo
}
これで、カメラが自己位置に戻ってしまう問題が解決。
逆に、カメラを自己位置に戻すための処理を追加する。
ボタンを配置して、押すとカメラが自己位置に戻るようにした。
hereButton = UIButton(frame: CGRect(x: UIScreen.main.bounds.width-80 ,y: UIScreen.main.bounds.height-80 ,width: 60, height: 60))
hereButton.backgroundColor = .lightGray
hereButton.layer.cornerRadius = 30.0
hereButton.setTitle("◉", for: .normal)
hereButton.setTitleColor(.white, for: .normal)
hereButton.addTarget(self, action: #selector(pushHereButton), for: .touchUpInside)
self.view.addSubview(hereButton)
@objc func pushHereButton(_ button: UIButton) {
// ToDo
camera = GMSCameraPosition.camera(withTarget: myPos,zoom: ZOOM)
self.mapView.animate(to: camera)
}