2013-08-28 3 views
2

J'ai une image sur une carte et je veux lui donner un mouvement linéaire et de rotation sur les cartes google.Animer le marqueur dans Google Maps SDK dans iOS

Comment puis-je le faire dans GMS? Aidez-moi, s'il vous plaît.

+0

http://stackoverflow.com/questions/40543095/bounce-animation-on-google-map-marker-in-ios-objective-c/41764821#41764821 animer google marker dans iOS – Dhiru

Répondre

2

Vous pouvez ajouter l'image comme un marqueur, puis utiliser la propriété de la couche de ce marqueur pour ajouter des animations en utilisant CoreAnimation

Voir les docs: developers.google.com/maps/documentation/ios/reference/

+0

Je suis conscient de cela . Il y a une propriété de calque sur GMSMarker qui vous permet de l'animer. J'ai juste animé un marqueur en l'utilisant. Voir les documents: https://developers.google.com/maps/documentation/ios/reference/interface_g_m_s_map_layer – kmdupr33

+0

DÉSOLÉ! Je ne savais pas qu'ils ont ajouté que - nous sommes toujours sur une très ancienne version –

+0

Aucun problème du tout. – kmdupr33

0

En fait, je résolu le problème en utilisant le code suivant et Méthode GMSMarker setPosition:. Le code suivant fournit une rotation aux images et en utilisant setPosition: nous pouvons placer le marqueur/image n'importe où. La combinaison des deux donne le mouvement linéaire et de rotation requis.

- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees image: (UIImage*) image 
{ 
    CGSize size = image.size;; 

    UIGraphicsBeginImageContext(size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextTranslateCTM(context, 0.5f * size.width, 0.5f * size.height) ; 
    CGContextRotateCTM (context, DegreesToRadians(degrees)); 

    [ image drawInRect:(CGRect){ { -size.width * 0.5f, -size.height * 0.5f }, size } ] ; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return newImage; 
} 
+0

J'ai essayé votre code mais mon icône de marqueur semble rétrécie. Avez-vous une idée de comment résoudre ce problème? –

+0

@RahulVyas Cela pourrait être le cas si votre image n'est pas carrée. Essayez de changer le multiplicateur '0.5'. – khushalbokadey

+0

Essayé une autre chose qui a fonctionné. Savez-vous comment nous pouvons faire tourner la voiture en douceur dans la direction de déplacement comme uber? Je suis en train de mettre à jour les valeurs d'en-tête sur mon serveur. –

0

C'est un processus facile. Tout d'abord tourner le marqueur pour obtenir la bonne position en utilisant cette fonction:

+(float)getBearing:(CLLocationCoordinate2D)locations1 andSecond:(CLLocationCoordinate2D)locattion2{ 
    float fLat = degreesToRadians(locations1.latitude); 
    float fLng = degreesToRadians(locations1.longitude); 
    float tLat = degreesToRadians(locattion2.latitude); 
    float tLng = degreesToRadians(locattion2.longitude); 

    float degree = radiansToDegrees(atan2(sin(tLng-fLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(tLng-fLng))); 

    if (degree >= 0) { 
     return degree; 
    } else { 
     return 360+degree; 
    } 
} 

Ensuite, faites pivoter votre marqueur à la nouvelle rubrique:

YOUR_MARKER.rotation = CALCULATED_HEADING - 180; 

Maintenant, l'étape finale consiste à animer votre pilote en douceur

[CATransaction begin]; 
[CATransaction setAnimationDuration:3.1]; 
[YOUR_MARKER setPosition:NEW_LOCATION_COORDINATES]; 
[CATransaction commit];