2013-04-25 92 views
100

我正在嘗試使用Google Maps for iOS SDK最新版本1.2.1.2944來動畫GMSGroundOverlay。用戶可以控制圖像序列,所以使用動畫UIImage不是一種可能性,所以我在動態加載UIImageGMSGroundOverlay.icon設置爲正在更新的UIImageGMSGroundOverlay動畫 - 我應該使用CATiledLayer嗎?

除了高內存使用情況,我似乎在已經達成的限制每當我試圖覆蓋一個UIImage使用GMSGroundOverlay.icon即超過1000像素X 1000像素,它崩潰。引用1000px x 1000px的UIImage會導致崩潰。

這令我雖然也許我應該利用CATiledLayer的圖像處理只加載到內存中,並隨後進入GMSGroundOverlay圖標的屬性,但有沒有人曾使用CATiledLayer與谷歌地圖iOS版SDK和測序圖像的任何經驗作爲動畫GMSGroundOverlay

+0

我有同樣的問題,雖然我看到的崩潰的門檻更低。我很想看到這個解決方案。 – 2013-05-05 19:03:38

+0

我想爲各種GMSOverlays提供解決方案 – 2013-05-05 19:29:20

+0

我看不到你想如何使用TiledLayer ..覆蓋使用UIImage ... – 2013-05-05 19:30:11

回答

1

我從pressanswer.com得到了這個答案,我認爲它可以幫助你。

由於目前我不能使用「position」keypath進行動畫製作,因此我最終使用「緯度」和「經度」keypath單獨進行了動畫處理。

首先計算點並將它們添加到2個單獨的數組中,一個用於緯度值(y)和一個用於經度(x),然後使用CAKeyFrameAnimation中的values屬性進行動畫處理。創建2個CAKeyFrameAnimation對象(每個軸1個)並使用CAAnimationGroup將它們組合在一起並將它們一起動畫以形成一個圓。

在我的等式中,我改變每個軸上半徑的長度,這樣我也可以生成一條橢圓路徑。

NSMutableArray *latitudes = [NSMutableArray arrayWithCapacity:21]; 
    NSMutableArray *longitudes = [NSMutableArray arrayWithCapacity:21]; 
    for (int i = 0; i <= 20; i++) { 
     CGFloat radians = (float)i * ((2.0f * M_PI)/20.0f); 

     // Calculate the x,y coordinate using the angle 
     CGFloat x = hDist * cosf(radians); 
     CGFloat y = vDist * sinf(radians); 

     // Calculate the real lat and lon using the 
     // current lat and lon as center points. 
     y = marker.position.latitude + y; 
     x = marker.position.longitude + x; 


     [longitudes addObject:[NSNumber numberWithFloat:x]]; 
     [latitudes addObject:[NSNumber numberWithFloat:y]]; 
    } 

    CAKeyframeAnimation *horizontalAnimation = [CAKeyframeAnimation animationWithKeyPath:@"longitude"]; 
    horizontalAnimation.values = longitudes; 
    horizontalAnimation.duration = duration; 

    CAKeyframeAnimation *verticleAnimation = [CAKeyframeAnimation animationWithKeyPath:@"latitude"]; 
    verticleAnimation.values = latitudes; 
    verticleAnimation.duration = duration; 

    CAAnimationGroup *group = [[CAAnimationGroup alloc] init]; 
    group.animations = @[horizontalAnimation, verticleAnimation]; 
    group.duration = duration; 
    group.repeatCount = HUGE_VALF; 
    [marker.layer addAnimation:group forKey:[NSString stringWithFormat:@"circular-%@",marker.description]]; 
+0

這不是GMSGroundOverlay。你正在展示一個GMSMarker。覆蓋圖不提供對「圖層」的相同訪問權限 – 2014-08-31 20:51:10