Google Mapsのズームをアニメーションで。

単純にズームしたいだけなら、GMSMapView setCameraUpdateなどを使用する。

GMSCameraUpdate* update = [GMSCameraUpdate zoomBy:17.0f];
 [self.map moveCamera:update];

ただ、これだとズームが即座に行われてなんかカッコよくない。 アニメーションしながらズームさせたい場合はGMSMapViewのanimateToZoomとかを使う。

[self.map animateToZoom:17.0f];

さらに、ここから「アニメーションでズームした直後にほげほげしたい」という場合は単純に

[self.map animateToZoom:17.0f];
[self ほげほげ];

などと書ければよいが、実際にはズームのアニメーション完了を待たずにほげほげが実行される。

アニメーションの完了を待つようなGoogle MapsAPIは用意されていないが、Core Animationと組み合わせれば実現できる。コードが若干長くなるのがいまいち。なんかいい方法ないかな。

[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat: 1.0f] forKey:kCATransactionAnimationDuration];
[CATransaction setCompletionBlock:^{
    [self ほげほげ];
}];
[self.map animateToZoom:17.0f];
[CATransaction commit];