2013-08-28 72 views
2

我在地圖上有一張圖片,我想在谷歌地圖上給它一些線性和旋轉運動。iOS中谷歌地圖SDK中的動畫標記

我該如何在GMS中做到這一點?請幫幫我。

+0

http://stackoverflow.com/questions/40543095/bounce-animation-on-google-map-marker-in-ios-objective-c/41764821#41764821在iOS中動畫google標記 – Dhiru

回答

2

您可以添加圖片作爲標記,然後使用該標誌的圖層屬性使用CoreAnimation

請參閱該文檔中添加一些動畫:developers.google.com/maps/documentation/ios/reference/

+0

我知道。 GMSMarker上有一個圖層屬性,允許您爲其設置動畫效果。我只是用它來動畫一個標記。查看文檔:https://developers.google.com/maps/documentation/ios/reference/interface_g_m_s_map_layer – kmdupr33

+0

SORRY!沒有意識到他們補充說 - 我們仍然是一個非常舊的版本 –

+0

沒有問題。 – kmdupr33

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; 
} 
+0

我試過你的代碼,但我的標記圖標似乎收縮。你有什麼想法如何解決這個問題? –

+0

@RahulVyas如果你的圖像不是方形的,那可能就是這種情況。嘗試改變'0.5'乘數。 – khushalbokadey

+0

試過另一件有效的事情。你知道我們怎麼能像超級跑車那樣順暢地轉動汽車嗎?我正在更新服務器上的標題值。 –

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