ちろる

理系大学生が自由気ままに

Google Map SDK for iOS (addSubviewを使う)

Google Map SDK for iOS

基本的なところは@koogawaさんの記事が参考になった。

qiita.com

今回やったところ

公式のドキュメントやQiitaにある記事を見ても下のコードのようにUIViewそのものをそっくり置き換え(?)ていたが、Mapと同一のUIViewにStoryboard上でボタンを配置したい。

view = mapView


とりあえず作成したプログラムとストーリーボード。

let BoundSize: CGSize = UIScreen.main.bounds.size
        
let camera = GMSCameraPosition.camera(withLatitude: 35.681167, longitude: 139.767052, zoom: 14.0)
let mapView = GMSMapView.map(withFrame: CGRect.init(x: 0, y: 0, width: BoundSize.width, height: BoundSize.height), camera: camera)
mapView.center = CGPoint(x:self.view.frame.width/2,y:self.view.frame.height/2)
view.addSubview(mapView)
self.view.sendSubviewToBack(mapView)

f:id:tsupiano:20181223160903p:plain
ストーリーボード
AddDataViewControllerのシーンのバックにマップを表示させて、マップ以外はStoryboardで作った。

  1. BoundSizeで画面の大きさを取得
  2. GMSMapView.mapの引数withFrameにCGRectでマップを表示する領域を指定して(?)Viewを作成
  3. addSubviewでAddDataViewControllerのビューに追加
  4. 最全面に配置されて他の部品が隠れてしまうので、sendSubviewToBackで最背面に移動

未解決の問題

上記の方法でやる前にContainer Viewを使って、それにembedした(?)MapViewContrallerという別クラスで作ろうとした。(それが設計上適切であるかはわからないけど、公式ドキュメントがview = mapViewとしていたのもあって)
でもマップとその他部品は正しく表示されたけど、指定した緯度経度の位置が画面の一番左上にきてしまった。
色々試行錯誤したけど解決できなかったので、原因等がわかるかたは良かったらコメントしてほしい。。。