Animasi GMSGroundOverlay - haruskah saya menggunakan CATiledLayer?


99

Saya sedang bereksperimen dengan Google Maps untuk iOS SDK versi terbaru 1.2.1.2944 untuk menganimasikan file GMSGroundOverlay. Pengguna memiliki kendali atas urutan gambar, jadi UIImagesayangnya menggunakan animasi tidak memungkinkan, jadi saya memuat UIImagedengan cepat. Ini GMSGroundOverlay.icondisetel ke UIImageyang sedang diperbarui.

Selain penggunaan memori yang tinggi, saya tampaknya telah menemukan batasan bahwa setiap kali saya mencoba untuk melapisi UIImagepenggunaan GMSGroundOverlay.iconyang lebih dari 1000px x 1000px, itu macet. Mengacu UIImagedari 1000px x 1000px mendapat sekitar kecelakaan itu.

Menurut saya, mungkin saya harus memanfaatkan CATiledLayeruntuk menangani gambar hanya untuk memuat ke memori dan kemudian ke properti ikon GMSGroundOverlay, tetapi adakah yang punya pengalaman menggunakan CATiledLayerGoogle Maps untuk iOS SDK dan mengurutkan gambar sebagai animasi GMSGroundOverlay?


Saya mengalami masalah yang sama, meskipun ambang batas yang saya lihat untuk error bahkan lebih rendah. Saya ingin melihat solusi untuk ini.
eric.mitchell

Saya ingin solusi untuk semua jenis GMSOverlays
Daij-Djan

Saya tidak melihat bagaimana Anda ingin menggunakan TiledLayer .. overlay menggunakan gambar
UII

Jawaban:


1

Saya mendapat jawaban ini dari menekananswer.com, saya pikir ini dapat membantu Anda.

Karena saat ini saya tidak dapat menggunakan keypath "posisi" untuk menganimasikan, saya akhirnya menganimasikannya menggunakan keypath "latitude" dan "longitude" secara terpisah.

Pertama hitung poin dan tambahkan ke 2 larik terpisah, satu untuk nilai lintang (y) dan satu untuk bujur (x) dan kemudian gunakan properti values ​​di CAKeyFrameAnimation untuk menganimasikan. Buat 2 objek CAKeyFrameAnimation (1 untuk setiap sumbu) dan kelompokkan bersama-sama menggunakan CAAnimationGroup dan animasikan bersama-sama untuk membentuk lingkaran.

Dalam persamaan saya, saya memvariasikan panjang jari-jari pada setiap sumbu sehingga saya juga dapat menghasilkan jalur oval.

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

Ini bukan GMSGroundOverlay. Anda menampilkan GMSMarker. Hamparan tidak memberikan akses yang sama ke 'lapisan'
Erik Gross
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.