我在地图上有一张图像,我想在谷歌地图上给它一些线性和旋转运动。
我怎样才能在 GMS 中做到这一点?请帮我。
您可以将图像添加为标记,然后使用该标记的图层属性添加一些动画使用CoreAnimation
请参阅文档:developers.google.com/maps/documentation/ios/reference/
实际上我通过使用以下代码和 GMSMarker 方法 setPosition: 解决了这个问题。以下代码为图像提供旋转并使用 setPosition:我们可以将标记/图像放置在任何地方。两者的结合提供了所需的线性和旋转运动。
- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees image: (UIImage*) image
{
CGSize size = image.size;;
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM( context, 0.5f * size.width, 0.5f * size.height ) ;
CGContextRotateCTM (context, DegreesToRadians(degrees));
[ image drawInRect:(CGRect){ { -size.width * 0.5f, -size.height * 0.5f }, size } ] ;
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
这是一个简单的过程。首先使用此函数旋转标记以获得正确的标题:
+(float)getBearing:(CLLocationCoordinate2D)locations1 andSecond:(CLLocationCoordinate2D)locattion2{
float fLat = degreesToRadians(locations1.latitude);
float fLng = degreesToRadians(locations1.longitude);
float tLat = degreesToRadians(locattion2.latitude);
float tLng = degreesToRadians(locattion2.longitude);
float degree = radiansToDegrees(atan2(sin(tLng-fLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(tLng-fLng)));
if (degree >= 0) {
return degree;
} else {
return 360+degree;
}
}
然后将标记旋转到新标题:
YOUR_MARKER.rotation = CALCULATED_HEADING - 180;
现在,最后一步是平滑地为您的驱动程序设置动画
[CATransaction begin];
[CATransaction setAnimationDuration:3.1];
[YOUR_MARKER setPosition:NEW_LOCATION_COORDINATES];
[CATransaction commit];