Animation GMSGroundOverlay - Dois-je utiliser un CATiledLayer?

99

J'expérimente la dernière version 1.2.1.2944 du SDK Google Maps pour iOS pour animer un fichier GMSGroundOverlay. L'utilisateur a le contrôle sur la séquence d'images, donc l'utilisation d'une animation UIImagen'est malheureusement pas une possibilité, donc je charge à UIImagela volée. Le GMSGroundOverlay.iconest défini sur le UIImagequi est en cours de mise à jour.

Mis à part une utilisation élevée de la mémoire, il me semble avoir frappé une limitation en ce que chaque fois que j'essaie de superposer une UIImageutilisation GMSGroundOverlay.iconqui est supérieure à 1000px x 1000px, il se bloque. UIImageFaire référence à 1000px x 1000px permet de contourner le crash.

Il me semble cependant que je devrais peut-être utiliser CATiledLayerpour gérer l'image pour charger uniquement dans la mémoire et ensuite dans la propriété icon de GMSGroundOverlay, mais est-ce que quelqu'un a déjà utilisé CATiledLayerGoogle Maps pour le SDK iOS et séquencer des images sous forme d'animation GMSGroundOverlay?

RobWhistler
la source
J'ai juste le même problème, même si le seuil que je vois pour les plantages est encore plus bas. J'aimerais voir une solution pour cela.
eric.mitchell
Je voudrais une solution pour toutes sortes de GMSOverlays
Daij-Djan
Je ne vois pas comment vous voulez utiliser TiledLayer..la superposition utilise une UIImage ...
Daij-Djan

Réponses:

1

J'ai eu cette réponse de pressinganswer.com, je pense que cela peut vous aider.

Comme actuellement je ne peux pas utiliser le keypath "position" pour l'animation, j'ai fini par l'animer en utilisant les keypaths "latitude" et "longitude" séparément.

Calculez d'abord les points et ajoutez-les à 2 tableaux séparés, un pour la valeur de latitude (y) et un pour la longitude (x), puis utilisez la propriété values ​​dans CAKeyFrameAnimation pour animer. Créez 2 objets CAKeyFrameAnimation (1 pour chaque axe) et regroupez-les à l'aide de CAAnimationGroup et animez-les ensemble pour former un cercle.

Dans mon équation, je varie la longueur du rayon sur chaque axe afin de pouvoir également générer un chemin ovale.

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]];
Rashad Valliyengal
la source
Ce n'est pas le GMSGroundOverlay. Vous montrez un GMSMarker. La superposition ne fournit pas le même accès à la `` couche ''
Erik Gross