3

我在地图上有一张图像,我想在谷歌地图上给它一些线性和旋转运动。

我怎样才能在 GMS 中做到这一点?请帮我。

4

3 回答 3

2

您可以将图像添加为标记,然后使用该标记的图层属性添加一些动画使用CoreAnimation

请参阅文档:developers.google.com/maps/documentation/ios/reference/

于 2014-03-19T16:16:50.927 回答
0

实际上我通过使用以下代码和 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;
}
于 2014-03-20T10:02:34.753 回答
0

这是一个简单的过程。首先使用此函数旋转标记以获得正确的标题:

+(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];
于 2017-07-06T12:16:12.450 回答