Поверните 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; }