2013-03-27 9 views
23

Die Dokumentation für Google Maps für iOS heißt es:Controlling-Animation Dauer in Google Maps für iOS

Anruf eine von mehreren Methoden, mit denen Sie die Kamera animieren, um eine neue Position zu bewegen. Sie können die Dauer der Animation mit CoreAnimation steuern.

Für das Leben von mir kann ich nicht herausfinden, wie die Animationsdauer zu steuern. Ich habe versucht, UIView Animationen verwenden, wie:

[UIView animateWithDuration: 5 animations:^{ 
     GMSCameraPosition *camera = [self newCamera]; 
     self.mapView.camera = camera; 
    } completion:^(BOOL finished) { 
    }]; 

Und ich habe bei CALayer Animationen in Coreanimation aussehen. Ich weiß jedoch nicht, wie Sie eine Ebenenanimation auf die Kartenansicht anwenden würden.

Kann mir jemand in die richtige Richtung weisen bitte?

Antwort

38

fand ich die Antwort ... Sie die Animation Dauer durch Umwickeln eines der belebten steuern * Methoden in einem CATransaction, wie folgt aus:

[CATransaction begin]; 
    [CATransaction setValue:[NSNumber numberWithFloat: 1.0f] forKey:kCATransactionAnimationDuration]; 
    // change the camera, set the zoom, whatever. Just make sure to call the animate* method. 
    [self.mapView animateToCameraPosition: [self newCamera]]; 
    [CATransaction commit]; 
+1

musste das :-) danke. – user1007522

2

was schadet, dass die gleichen Methoden verwenden Sie zur Verfügung gestellt, ist keine Möglichkeit zu wissen, ob die Animation beendet ist.

Ja, ich weiß, es gibt einen CATransaction Abschlussblock mit dieser Methode, aber es funktioniert einfach nicht! :(

[CATransaction begin]; 
[CATransaction setValue:[NSNumber numberWithFloat: 1.0f] forKey:kCATransactionAnimationDuration]; 

[CATransaction setCompletionBlock:^{ 
// ... whatever you want to do when the animation is complete 
}]; 

[self.googleMapsView animateToCameraPosition:[GMSCameraPosition 
        cameraWithLatitude:LATITUDE 
          longitude:LONGITUDE 
            zoom:ZOOM]]; 

[CATransaction commit]; 

Und ich kann MapView nicht benutzen. DidIdle Hack zu wissen, dass die Animation beendet hat, weil es wird nicht aufgerufen werden, wenn es keine Änderung der Kameraposition ist

Wer weiß, wie zu erkennen animateon Ereignis beendet ist

fand einen Thread dazu (gelöst): CATransaction completion being called immediately

5

Swift 2.0

CATransaction.begin() 
CATransaction.setValue(NSNumber(float: 1.0), forKey: kCATransactionAnimationDuration) 
// change the camera, set the zoom, whatever. Just make sure to call the animate* method. 
CATransaction.commit() 
+0

Das funktioniert super - danke! –

9

für Swift 3.0:

CATransaction.begin() 
CATransaction.setValue(1.5, forKey: kCATransactionAnimationDuration) 
// your camera code goes here, example: 
// mapView.animate(with: update) 
CATransaction.commit() 

Je größer der Wert (1,5 in diesem Fall), desto langsamer ist die Animation.