GMSGroundOverlay анимация - должен ли я использовать CATiledLayer?

Я экспериментирую с последней версией 1.2.1.2944 для Google Maps для iOS SDK для анимации GMSGroundOverlay. Пользователь имеет контроль над последовательностью изображений, поэтому использование анимированного UIImage не представляется возможным, поэтому я загружаю UIImage на лету. Параметр GMSGroundOverlay.icon установлен в UIImage, который обновляется.

Помимо использования большой памяти, я, похоже, использовал ограничение в том, что всякий раз, когда я пытаюсь наложить UIImage с помощью GMSGroundOverlay.icon, который превышает 1000px x 1000px, он сработает. Ссылка на UIImage 1000px x 1000px обойдется крушением.

Мне кажется, что, возможно, я должен использовать CATiledLayer для обработки изображения только для загрузки в память, а затем в свойство значка GMSGroundOverlay, но кто-нибудь имел опыт использования CATiledLayer с Google Maps для iOS SDK и упорядочивание изображений в виде анимированного GMSGroundOverlay?

Ответ 1

Я получил этот ответ от pressanswer.com, я думаю, это может помочь вам.

Как и в настоящее время я не могу использовать ключевую ссылку "позиция" для анимации, я закончил ее анимацию, используя "широту" и "широту" keypaths отдельно.

Сначала вычислите точки и добавьте их в 2 отдельных массива, один для значения широты (y) и один для долготы (x), а затем используйте свойство values ​​в CAKeyFrameAnimation для анимации. Создайте 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]];