GMSGroundOverlay animasyonu - CATiledLayer kullanmalı mıyım?


99

Google Maps for iOS SDK en son sürüm 1.2.1.2944 ile bir GMSGroundOverlay. Kullanıcı görüntü dizisi üzerinde kontrole sahiptir, bu nedenle animasyon kullanmak UIImagemaalesef bir olasılık değildir, bu yüzden UIImageanında yüklüyorum . GMSGroundOverlay.iconAyarlandığında UIImagegüncellenmekte olduğunu.

Kenara yüksek bellek kullanımı, ben bindirmek istediğiniz her seferinde bir sınırlama vurdu var gibi UIImagekullanarak GMSGroundOverlay.icono aşkın 1000 piksel x 1000 piksel, o çöküyor. Bir başvurulması UIImage1000px x 1000 piksel kazasında yayılıyor.

Belki CATiledLayerde görüntüyü yalnızca belleğe ve ardından simge özelliğine yüklemek için kullanmalıyım GMSGroundOverlay, ancak CATiledLayeriOS için Google Haritalar SDK'sını kullanma ve görüntüleri animasyonlu olarak sıralama konusunda herhangi bir deneyimi olan var GMSGroundOverlaymı?


Aynı sorunu yaşıyorum, ancak kazalar için gördüğüm eşik daha da düşük. Bunun için bir çözüm görmeyi çok isterim.
eric.mitchell

Her türlü GMSOverlays için bir çözüm istiyorum
Daij-Djan

TiledLayer'ı nasıl kullanmak istediğinizi anlamıyorum..bindirme bir UIImage kullanıyor ...
Daij-Djan

Yanıtlar:


1

Bu yanıtı pressanswer.com'dan aldım, size yardımcı olabileceğini düşünüyorum.

Şu anda animasyon için "konum" ana yolunu kullanamadığım için, "enlem" ve "boylam" ana yollarını ayrı ayrı kullanarak onu hareketlendirmeyi bıraktım.

Önce noktaları hesaplayın ve bunları biri enlem değeri (y) ve diğeri boylam (x) için olmak üzere 2 ayrı diziye ekleyin ve ardından canlandırmak için CAKeyFrameAnimation'daki values ​​özelliğini kullanın. 2 CAKeyFrameAnimation nesnesi (her eksen için 1) oluşturun ve CAAnimationGroup kullanarak bunları gruplayın ve bir daire oluşturmak için bunları birlikte hareketlendirin.

Denklemimde, her eksendeki yarıçapın uzunluğunu değiştiriyorum, böylece oval bir yol da oluşturabiliyorum.

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

Bu GMSGroundOverlay değildir. Bir GMSMarker gösteriyorsunuz. Yer paylaşımı "katman" için aynı erişimi sağlamıyor
Erik Gross
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.