iOS用のGoogleMapsSDKを使用しています。マップ上にマーカーがあり、マーカーが分離され、マーカーが画面に一度に表示されるように適切なズームを設定したいと考えています。私はそれを行うことができます。すべてのマーカーが表示されている場合はズームインするというロジックを使用しました。しかし、問題はマップカメラが急激に変化していることです。このズームをアニメートするために多くのことを試みましたが、失敗しました。animateToCameraPosition、animateToZoom、UIViewアニメーションメソッドを試しました。
- (BOOL)allCoordinatesVisibleWithLatitudes:(NSArray *)arrayOfLatitudes Longitudes:(NSArray *)arrayOfLongitudes
{
CLLocationCoordinate2D coordinate;
for(int i=0;i<arrayOfLatitudes.count;i++)
{
coordinate = CLLocationCoordinate2DMake([[arrayOfLatitudes objectAtIndex:i] floatValue], [[arrayOfLongitudes objectAtIndex:i] floatValue]);
if(![self.mapView.projection containsCoordinate:coordinate])
{
return NO;
}
}
return YES;
}
- (void)setZoomToHaveProperView
{
NSMutableArray * arrayOfLatitudes = [[NSMutableArray alloc] init];
NSMutableArray * arrayOfLongitudes = [[NSMutableArray alloc] init];
RS_SingleMatch * singleMatch = [[RS_SingleMatch alloc] init];
float zoom = 0.0;
// You may ignore this first for loop. it just takes coordinate of all markers in arrays.
for(int i=0;i<=self.userMatches.arrayOfMatches.count;i++)
{
if(i==self.userMatches.arrayOfMatches.count)
{
RS_Trip * userTrip = [[RS_Trip alloc] init];
[arrayOfLatitudes addObject:[NSNumber numberWithFloat:userTrip.fromLat]];
[arrayOfLongitudes addObject:[NSNumber numberWithFloat:userTrip.fromLon]];
if(self.segmentedControl.selectedSegmentIndex == 1)
{
[arrayOfLatitudes addObject:[NSNumber numberWithFloat:userTrip.toLat]];
[arrayOfLongitudes addObject:[NSNumber numberWithFloat:userTrip.toLon]];
}
}
else
{
singleMatch = [self.userMatches.arrayOfMatches objectAtIndex:i];
[arrayOfLatitudes addObject:[NSNumber numberWithFloat:singleMatch.fromLat]];
[arrayOfLongitudes addObject:[NSNumber numberWithFloat:singleMatch.fromLong]];
if(self.segmentedControl.selectedSegmentIndex == 1)
{
[arrayOfLatitudes addObject:[NSNumber numberWithFloat:singleMatch.toLat]];
[arrayOfLongitudes addObject:[NSNumber numberWithFloat:singleMatch.toLong]];
}
}
}
zoom = self.mapView.camera.zoom;
// if all coordinates are visible then zoom in
if([self allCoordinatesVisibleWithLatitudes:arrayOfLatitudes Longitudes:arrayOfLongitudes])
{
while ([self allCoordinatesVisibleWithLatitudes:arrayOfLatitudes Longitudes:arrayOfLongitudes])
{
zoom += 0.5;
[self.mapView setCamera:[GMSCameraPosition cameraWithTarget:self.mapView.camera.target zoom:zoom]];
[self.mapView animateToCameraPosition:[GMSCameraPosition cameraWithTarget:self.mapView.camera.targetAsCoordinate zoom:zoom]];
}
}
}
また、if条件のwhileループで、mapviewカメラの設定とカメラのアニメーションの順序を逆にしてみました。私はそれをするだけで3日を過ごしました。今あなたの助けを求めています。前もって感謝します。