按照用户所在的方向旋转GMSMarker

我有要求就像我目前的位置一个视图将显示。 它会旋转,如果设备是旋转或位置会改变。我研究了很多,但得到了所有的代码有一个固定的位置或angular度在某些位置,但我没有确定位置。 任何人都可以驾驶我正确的方向。

我也使用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,因为没有变换的方法。

如何在谷歌地图旋转他们的车?

在这里输入图像说明

你可以做一些像 –

 -(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; } 

当前位置的“CLLocation”对象有一个名为“course”的属性

 @property(readonly, nonatomic) CLLocationDirection course; 

typesCLLocationDirection(double的typedef),它是位置的angular度。

对于汽车的旋转,你需要额外的领域在你的后端,方向,以及经度和纬度。 通过在UIView上应用Transform来使用这个信息来旋转汽车

 CGAffineTransformMakeRotation(M_PI * (course_of_location) / 180.0); 

我们可以根据课程属性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 

//只是做这个

 - (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; 

注意:只有在移动过程中才会旋转到别针。 在静态设备的情况下,会有-1的location.course值。 这也与设备方向无关。 如果您想根据设备标题移动引脚,请执行此操作

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