GMSGroundOverlayアニメーション-CATiledLayerを使用する必要がありますか?


99

Google Maps for iOS SDKの最新バージョン1.2.1.2944を試して、をアニメーション化していGMSGroundOverlayます。ユーザーは画像シーケンスを制御できるため、UIImage悲しいことにアニメーションを使用することはできません。そのためUIImage、オンザフライでロードしています。GMSGroundOverlay.icon設定されているUIImage更新されています。

別に高いメモリ使用量から、私はオーバーレイしようとする時はいつでもその中に制限を打っているように見えるUIImage使用してGMSGroundOverlay.iconそれ以上1000px X 1000pxですが、それがクラッシュします。UIImage1000px x 1000pxのa を参照すると、クラッシュを回避できます。

CATiledLayer画像を処理してメモリにロードしてからのアイコンプロパティにロードするだけでよいのではないかと思いますがGMSGroundOverlay、誰かがCATiledLayeriOS用Google Maps SDK を使用して画像をアニメーションとしてシーケンスした経験はありGMSGroundOverlayますか?


私は同じ問題を抱えていますが、クラッシュのしきい値はさらに低くなっています。これに対する解決策を見たいです。
eric.mitchell 2013

あらゆる種類のGMSOverlayのソリューションを希望します
Daij-Djan

TiledLayerをどのように使用したいのかわかりません。オーバーレイはUIImageを使用します...
Daij-Djan

回答:


1

私はpressinganswer.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]];

これはGMSGroundOverlayではありません。GMSMarkerを表示しています。オーバーレイは「レイヤー」への同じアクセスを提供しません
Erik Gross
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.