iOS用のグーグルマップSDKの場所でCentermapviewを設定する方法は?mapkitを使用すると、setCenter:Locationを実行できます。iOS用のグーグルマップSDKでこれを行う方法。
3 に答える
GMSCameraPositionコンストラクターを使用して新しいカメラを作成します
+ (GMSCameraPosition *)cameraWithTarget:(CLLocationCoordinate2D)target zoom:(CGFloat)zoom
次に、メソッドを使用します
- (void)animateToCameraPosition:(GMSCameraPosition *)cameraPosition;
ただ使うこともできます
- (void)animateToLocation:(CLLocationCoordinate2D)location;
ただし、前の方法では、カメラの最終的な外観をより細かく制御したい場合は、カメラコンストラクター内でズーム、方位、および表示角度を変更できます。
私はこのヘルパーメソッドを使用します:
- (void)focusOnCoordinate:(CLLocationCoordinate2D) coordinate {
[self.mapView animateToLocation:coordinate];
[self.mapView animateToBearing:0];
[self.mapView animateToViewingAngle:0];
[self.mapView animateToZoom:ZOOM_LEVEL];
}
上記の私のコメントで述べたように、「animate ...」ソリューションは真の中心を提供せず(代わりにトップセンターを提供します)、「moveCamera:」は実際に真の中心を提供します(ただしアニメーションはしません)。
私の唯一の回避策は、「moveCamera:」の呼び出しの後に「animateToZoom:」の呼び出しを追加することでした。これにより、真の中心が提供され、中心に「幻想的な」アニメーションが追加されます。
[mapView moveCamera:[GMSCameraUpdate setTarget:marker.position]];
[mapView animateToZoom:zoom_marker_select];
更新:ズームアウトしてからズームインして真の中心(マーカータップ)を使用する、よりエレガントなアニメーションソリューション。
#define zoom_marker_select 17.0f
// GMSMapViewDelegate callback
- (BOOL)mapView:(GMSMapView *)mview didTapMarker:(GMSMarker *)marker
{
[self animateToCenterMarker:marker zoom:zoom_marker_select];
// NO = should continue with its default selection behavior (ie. display info window)
return NO;
}
// custom true center with animation function
- (void)animateToCenterMarker:(GMSMarker*)marker zoom:(float)zoom
{
/*
NOTE: '[mapView animateToLocation:marker.position]' (or others like it below)
does NOT provide true center, they provide top center instead
only found 'moveCamera:' to provide true center (but animation doesn't occur)
- workaround: add call to 'animateToZoom:' right after 'moveCamera:' call
- elegant workaround: zoom out, center, then zoom in (animation sequnce below)
*/
//[mapView animateToLocation:marker.position];
//[mapView animateToCameraPosition:marker.position];
//[mapView animateWithCameraUpdate:[GMSCameraUpdate setTarget:marker.position]];
[CATransaction begin];
[CATransaction setAnimationDuration:0.5f];
[CATransaction setCompletionBlock:^{
// 2) move camera to true center:
// - without animation
// - while zoomed out
[mapView moveCamera:[GMSCameraUpdate setTarget:marker.position]];
[CATransaction begin];
[CATransaction setAnimationDuration:0.5f];
// 3) animate dur 0.5f:
// - zoom back in to desired level
[mapView animateToZoom:zoom];
[CATransaction commit];
}];
// 1) animate dur 0.5f:
// - zoom out to current zoom - 1
// - set location to top center of selected marker
// - set bearing to true north (if desired)
float zoomout = mapView.camera.zoom -1;
[mapView animateToZoom:zoomout];
[mapView animateToLocation:marker.position];
[mapView animateToBearing:0];
[CATransaction commit];
}
注:独自の座標を設定する場合は、marker.positionを独自のCLLocationCoordinate2Dに置き換えてください。