Carte de la position de la caméra change brusquement sans animation
- Je utiliser les Cartes de google SDK pour iOS.
J'ai marqueurs sur ma carte et que vous souhaitez mettre bon zoom, de sorte que les repères sont distinctes et également des marqueurs doit être visible sur l'écran à la fois.
Je suis capable de le faire.Je l'ai fait en utilisant la logique que si tous les marqueurs sont alors visibles effectuer un zoom avant. Mais le problème est que la carte de la caméra est en train de changer considérablement. J'ai essayé beaucoup de choses pour animer ce zoom, mais je n'ai pas réussi à faire. J'ai essayé animateToCameraPosition, animateToZoom et UIView animation de la méthode.
- (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]];
}
}
}
J'ai aussi essayé d'inverser l'ordre de réglage de la mapview caméra et d'animation de la caméra dans la boucle while de la condition if. J'ai passé 3 jours à le faire simplement. Maintenant demande votre aide.
Je vous remercie à l'avance.
OriginalL'auteur Geek | 2013-03-19
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème, c'est que l'appel à
setCamera
sautera vers le nouveau niveau de zoom sans animation - et donc l'appel suivant àanimateToCameraPosition
de ne pas les animer en fait n'importe quoi, comme la caméra est déjà à cette position.Toutefois, si vous avez supprimé l'appel à
setCamera
alors vous feriez probablement jusqu'à la fin dans une boucle infinie, comme l'appel àanimateToCameraPosition
ne sera pas fait de mise à jour de l'appareil photo jusqu'à ce que quelque temps plus tard (comme l'animation joue), et donc sur la prochaine itération de la boucle, les marqueurs toujours être visible.Ce que vous devez faire est de calculer le niveau de zoom que vous avez besoin, et ensuite faire un seul appel à
animateToCameraPosition
pour déplacer la caméra.J'ai posté un peu de code pour calculer le centre et le niveau de zoom d'un appareil photo à un ajustement des limites ici:
Comment setRegion avec google maps sdk pour iOS?
Afin que vous pouvez utiliser quelque chose de similaire pour calculer la position de la caméra qui correspondent à vos marqueurs à l'écran.
OriginalL'auteur Saxon Druce
Beaucoup plus simple de répondre:
Au lieu de
Ce faire:
Fonctionne pour moi!
OriginalL'auteur stackOverFlew
OriginalL'auteur Sajid Israr
Ce code effectue en douceur et d'animation de repositionnement de la mapview de l'appareil photo pour le marqueur sélectionné.
Commentaire est ajouté
OriginalL'auteur timurbeg