按照用户所在的方向旋转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; }