2013-04-25 10 views
100

Ich experimentiere mit der neuesten Version 1.2.1.2944 des Google Maps für iOS SDK, um eine GMSGroundOverlay zu animieren. Der Benutzer hat die Kontrolle über die Bildsequenz, so dass die Verwendung einer animierten UIImage leider keine Möglichkeit ist, so dass ich in der UIImage im laufenden Betrieb laden. Die GMSGroundOverlay.icon wird auf die UIImage festgelegt, die aktualisiert wird.GMSGroundOverlay Animation - sollte ich einen CATiledLayer verwenden?

Abgesehen von hoher Speicherauslastung, habe ich anscheinend eine Einschränkung in diesem, wenn ich versuche, eine mit GMSGroundOverlay.icon, die mehr als 1000px x 1000px überlagert ist, stürzt ab. Die Referenzierung eines UIImage von 1000px x 1000px kommt um den Absturz herum.

Es scheint mir aber, dass vielleicht sollte ich CATiledLayer für die Handhabung des Bildes nur Last in den Speicher nutzen und anschließend in das Symbol Eigenschaft GMSGroundOverlay, hat aber jemand hatte keine Erfahrung von CATiledLayer mit Google Maps für iOS SDK und Sequenzierung Bilder als animierte GMSGroundOverlay?

+0

Ich habe gerade das gleiche Problem, obwohl die Schwelle, die ich für Unfälle sehe, noch niedriger ist. Ich würde gerne eine Lösung dafür sehen. –

+0

Ich möchte eine Lösung für alle Arten von GMSOverlays –

+0

Ich sehe nicht, wie Sie TiledLayer..the Overlay verwendet eine UIImage verwenden möchten ... –

Antwort

1

bekam ich diese Antwort von pressinganswer.com, ich denke, es kann Ihnen hilft.

Wie ich derzeit nicht die „Position“ Schlüsselpfad für die Animation verwenden können, landete ich es die „Breite“ mit Animieren und „Länge“ keypaths getrennt.

Berechnen Sie zuerst die Punkte und fügen Sie sie zu zwei separaten Arrays hinzu, eins für Breitengrad (y) und eins für Längengrad (x). Verwenden Sie dann die values-Eigenschaft in CAKeyFrameAnimation, um zu animieren. Erstellen Sie 2 CAKeyFrameAnimation-Objekte (1 für jede Achse) und gruppieren Sie sie mit CAAnimationGroup zusammen und animieren Sie sie zu einem Kreis zusammen.

In meiner Gleichung variieren I die Länge des Radius an jeder Achse, so dass ich auch einen ovalen Pfad erzeugen kann.

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

Dies ist nicht der GMSGroundOverlay. Sie zeigen einen GMSMarker. Das Overlay bietet nicht den gleichen Zugriff auf die "Ebene" –