ios crash overlay google-maps-sdk-ios catiledlayer

ios - Animación de GMSGroundOverlay: ¿Debería usar un CATiledLayer?



crash google-maps-sdk-ios (1)

Estoy experimentando con la última versión 1.2.1.2944 de Google Maps para iOS SDK para animar un GMSGroundOverlay . El usuario tiene control sobre la secuencia de la imagen, por lo que utilizar un UIImage animado no es una posibilidad tristemente, así que estoy cargando el UIImage sobre la marcha. GMSGroundOverlay.icon se establece en el UIImage que se está actualizando.

Aparte del alto uso de memoria, parece que me he topado con una limitación porque cada vez que trato de superponer un UIImage usando GMSGroundOverlay.icon que es más de 1000px x 1000px, se cuelga. Al hacer referencia a un UIImage de 1000px x 1000px, se soluciona el problema.

Sin embargo, me parece que debería utilizar CATiledLayer para manejar la imagen y cargarla en la memoria y posteriormente en la propiedad icon de GMSGroundOverlay , pero alguien ha tenido experiencia en utilizar CATiledLayer con Google Maps para iOS SDK y secuenciar imágenes como GMSGroundOverlay animado GMSGroundOverlay ?


Recibí esta respuesta de pressinganswer.com, creo que puede ser útil.

Como actualmente no puedo usar la ruta de tecla de "posición" para animar, terminé animando con las vías de acceso de "latitud" y "longitud" por separado.

Primero calcule los puntos y agréguelos a 2 matrices separadas, una para el valor de latitud (y) y otra para la longitud (x) y luego use la propiedad values ​​en CAKeyFrameAnimation para animar. Cree 2 objetos CAKeyFrameAnimation (1 para cada eje) y agrúpelos utilizando CAAnimationGroup y anímelos juntos para formar un círculo.

En mi ecuación, varío la longitud del radio en cada eje para que también pueda generar una trayectoria 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]];