Поверните GMSMarker в направлении, с которым пользователь сталкивается
У меня есть требование, как в моем текущем местоположении появится одно представление. Он будет вращаться, если устройство вращается или местоположение будет изменено. Я исследую лот, но получил весь код, который имеет местоположение или угол исправления в каком-либо месте, но я не исправляю местоположение. Может ли кто-нибудь водить меня в правильном направлении.
Я также использовал свойство rotation GMSMarker, но он не работает.
- (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;
}
Обновить. У меня есть метод ротации, но есть ли способ повернуть GMSMarker, потому что нет способа преобразования.
Как uber поворачивает свой автомобиль на карте Google?
![введите описание изображения здесь]()
Ответы
Ответ 1
вы можете сделать что-то вроде -
-(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;
}
Ответ 2
Текущее местоположение Объект "CLLocation" имеет свойство "курс"
@property(readonly, nonatomic) CLLocationDirection course;
типа CLLocationDirection (typedef double), который является углом расположения.
Чтобы автомобиль вращался, вам нужно дополнительное поле в вашей стороне, направлении, а также широте и долготе. Используйте эту информацию для поворота автомобиля, применяя Transform on UIView
CGAffineTransformMakeRotation(M_PI * (course_of_location) / 180.0);
Ответ 3
Мы можем повернуть изображение на основе свойства курса 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
Ответ 4
//просто сделайте это только
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
double heading = newHeading.trueHeading;
marker.groundAnchor = CGPointMake(0.5, 0.5);
marker.rotation = heading;
marker.map = mapView;
}
Ответ 5
marker.rotation = course_of_location;
Примечание: поворот на контакт будет происходить только во время движения. в случае статического устройства будет -1 значение location.course. Также это не имеет отношения к ориентации устройства. Если вы хотите переместить булавку в соответствии с заголовком устройства, сделайте это
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
marker.rotation = (manager.heading.trueHeading) * M_PI / 180.0f; }