2013-04-25 11 views
100

GMSGroundOverlayをアニメーション化するために、Google Maps for iOS SDKの最新バージョン1.2.1.2944を試しています。ユーザーは画像シーケンスを制御できるので、アニメーションUIImageを使用することは悲しいことではないので、私はUIImageをオンザフライで読み込んでいます。 GMSGroundOverlay.iconは、更新中のUIImageに設定されています。GMSGroundOverlayアニメーション - CATiledLayerを使用する必要がありますか?

高いメモリ使用量とは別に、を使用してUIImageをオーバーレイしようとすると、1000px x 1000pxを超えるクラッシュが発生するという制限がありました。 UIImage(1000px x 1000px)を参照するとクラッシュします。

それは多分私がメモリにのみ負荷に画像を処理するためのCATiledLayerを利用する必要があり、その後GMSGroundOverlayのアイコンプロパティにかかわらず、それは私を打つ、しかし誰もがiOSのSDKおよび配列決定の画像GoogleマップでCATiledLayerを使用してのいずれかの経験を持っていましたアニメーションとしてGMSGroundOverlay

+0

クラッシュが発生していることを確認しているしきい値は低くなっていますが、同じ問題が発生しています。私はこれのための解決策を見たいと思う。 –

+0

GMSOverlaysのすべての種類のソリューションをご希望ですか –

+0

どのようにTiledLayerを使用するかはわかりません。オーバーレイはUIImageを使用しています... –

答えて

1

私はpress.comからこの回答を得ました。私はあなたを助けるかもしれないと思います。

現在のところ、私はアニメーション化のための "位置"キーパスを使用することができないので、別途 "緯度"と "経度"キーパスを使用してアニメーション化しました。

最初にポイントを計算し、それらを緯度値(y)と経度(x)の2つの別々の配列に追加し、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を表示しています。オーバーレイは、「レイヤー」レイヤーへの同じアクセスを提供しません。 –

関連する問題