Tạo hoạt ảnh cho GMSGroundOverlay - tôi có nên sử dụng CATiledLayer không?


99

Tôi đang thử nghiệm với SDK Google Maps dành cho iOS phiên bản 1.2.1.2944 mới nhất để tạo hoạt ảnh cho a GMSGroundOverlay. Người dùng có quyền kiểm soát chuỗi hình ảnh, vì vậy UIImageđáng buồn là việc sử dụng hoạt ảnh không phải là một khả năng, vì vậy tôi đang tải UIImagenhanh chóng. Các GMSGroundOverlay.iconđược đặt UIImageđang được cập nhật.

Bên cạnh việc sử dụng bộ nhớ cao, tôi dường như đã gặp phải một hạn chế là bất cứ khi nào tôi cố gắng phủ lên một tệp UIImagesử dụng GMSGroundOverlay.iconcó kích thước lớn hơn 1000px x 1000px, nó bị treo. Tham chiếu UIImage1000px x 1000px sẽ tránh được sự cố.

Mặc dù vậy, tôi rất ngạc nhiên rằng có lẽ tôi nên sử dụng CATiledLayerđể xử lý hình ảnh để chỉ tải vào bộ nhớ và sau đó chuyển vào thuộc tính biểu tượng của GMSGroundOverlay, nhưng có ai có kinh nghiệm sử dụng CATiledLayervới Google Maps dành cho iOS SDK và sắp xếp các hình ảnh dưới dạng hoạt ảnh GMSGroundOverlaykhông?


Tôi cũng gặp phải vấn đề tương tự, mặc dù ngưỡng mà tôi đang nhìn thấy đối với sự cố thậm chí còn thấp hơn. Tôi muốn thấy một giải pháp cho điều này.
eric.mitchell

Tôi muốn có một giải pháp cho tất cả các loại GMSOverlays
Daij-Djan,

Tôi không hiểu bạn muốn sử dụng TiledLayer như thế nào .. lớp phủ sử dụng UIImage ...
Daij-Djan

Câu trả lời:


1

Tôi nhận được câu trả lời này từ pressanswer.com, tôi nghĩ nó có thể giúp ích cho bạn.

Vì hiện tại tôi không thể sử dụng đường dẫn phím "vị trí" để tạo hoạt ảnh, nên tôi đã kết thúc hoạt ảnh bằng cách sử dụng đường dẫn phím "vĩ độ" và "kinh độ" riêng biệt.

Đầu tiên hãy tính toán các điểm và thêm chúng vào 2 mảng riêng biệt, một mảng cho giá trị vĩ độ (y) và một cho kinh độ (x), sau đó sử dụng thuộc tính giá trị trong CAKeyFrameAnimation để tạo hiệu ứng. Tạo 2 đối tượng CAKeyFrameAnimation (1 đối tượng cho mỗi trục) và nhóm chúng lại với nhau bằng CAAnimationGroup và tạo hiệu ứng động chúng lại với nhau để tạo thành một vòng tròn.

Trong phương trình của tôi, tôi thay đổi độ dài của bán kính trên mỗi trục để tôi cũng có thể tạo ra một đường hình bầu dục.

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

Đây không phải là GMSGroundOverlay. Bạn đang hiển thị GMSMarker. Lớp phủ không cung cấp cùng một quyền truy cập vào 'lớp'
Erik Gross
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.