GMSMapViewの回転

端末が回転したときにGMSMapViewもそれに合わせてサイズを変えたいと思って色々調べた。

qiita.com

そしたら- willAnimateRotationToInterfaceOrientation:duration: というメソッドが引っかかったのだが、これはiOS8.0以降deprecatedらしく- viewWillTransitionToSize: withTransitionCoordinator: というメソッドを代わりに使うべきなのらしい。

その中にどういう処理を書けば自動でリサイズできるのか色々調べていたら、以下のような記事を見つけた。

http://www.zero4racer.com/blog/988www.zero4racer.com

aroundthedistance.hatenadiary.jp

自分はGMSMapViewをUIViewのサブビューに突っ込んでやればオートレイアウトが効いて回転するかと思ってたらUIViewだけ効いててGMSMapViewはそのままだったので、手動でGMSMapViewのサイズをUIViewと揃えてやろうとしたらなぜか初っ端からずれる。その原因は上記2つの記事にあるように、オートレイアウト後のサイズはViewDidLoadのときには取得できないのであるらしいことによるものだった。

結局、以下のような書き方をした。

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    CGRect new = CGRectMake(0,0,size.width,size.height);
    self.mapView.frame = new;
}