Faire pivoter GMSMarker dans la direction à laquelle l'user est confronté

J'ai l'exigence comme sur ma position actuelle une vue s'affichera. Il va tourner si l'appareil était en rotation ou l'location va changer. Je search beaucoup mais j'ai tout le code qui a un location ou un angle fixe à un endroit mais je n'ai pas d'location fixe. Quelqu'un peut-il me conduire à la bonne direction.

J'ai également utilisé la propriété de rotation du GMSMarker mais cela ne fonctionne pas.

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { if (newHeading.headingAccuracy < 0){ NSLog(@"heading accuracy < 0"); return; } // Convert Degree to Radian and move the needle float oldRad = (- manager.heading.trueHeading) * M_PI / 180.0f; float newRad = (- newHeading.trueHeading) * M_PI / 180.0f; // Compass animation CABasicAnimation *theAnimation; theAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; theAnimation.fromValue = [NSNumber numberWithFloat:oldRad]; theAnimation.toValue = [NSNumber numberWithFloat:newRad]; theAnimation.duration = 0.5f; [source.layer addAnimation:theAnimation forKey:@"animateMyRotation"]; // source.transform = CGAffineTransformMakeRotation(newRad) // GMSMarker *source = [googleMap selectedMarker]; // source.rotation = newRad; } 

Mise à jour : J'ai la méthode de rotation, mais est-il possible de faire pivoter le GMSMarker car il n'y a pas de méthode pour la transformation.

Comment uber tourner leur voiture dans google map?

entrez la description de l'image ici

vous pouvez faire quelque chose comme –

 -(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { CLLocationDirection direction = newHeading.trueHeading; lastDriverAngleFromNorth = direction; self.driverMarker.rotation = lastDriverAngleFromNorth - mapBearing; } #pragma mark - GMSMapViewDelegate - (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position { mapBearing = position.bearing; self.driverMarker.rotation = lastDriverAngleFromNorth - mapBearing; } 

L'location actuel 'CLLocation' a une propriété appelée 'cours'

 @property(readonly, nonatomic) CLLocationDirection course; 

de type CLLocationDirection (typedef de double) qui est un angle de l'location.

Pour que la voiture tourne, vous avez besoin d'un champ supplémentaire dans votre backend, direction, ainsi que la latitude et la longitude. Utilisez cette information pour faire pivoter la voiture en appliquant Transform sur UIView

 CGAffineTransformMakeRotation(M_PI * (course_of_location) / 180.0); 

Nous pouvons faire pivoter l'image en fonction de la propriété CLLocation Class

  let marker:GMSMarker = GMSMarker.init(position: currentLocation!) let head = locationManager.location?.course ?? 0 marker.rotation = head marker.icon = UIImage(named: "testyCar.png") marker.map = mapView 

// fais juste ça

 - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { double heading = newHeading.trueHeading; marker.groundAnchor = CGPointMake(0.5, 0.5); marker.rotation = heading; marker.map = mapView; } 
 marker.rotation = course_of_location; 

Remarque: la rotation à l'épingle se produira uniquement pendant le mouvement. en cas de périphérique statique, il y aura -1 valeur de location.course. De plus, cela n'a aucune relation avec l'orientation du périphérique. Si vous cherchez à déplacer la broche en fonction du titre de l'appareil, faites-le

 - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { marker.rotation = (manager.heading.trueHeading) * M_PI / 180.0f; }