2013-03-27 4 views
23

La documentazione di Google Maps per iOS afferma che:Controllo Animazione Durata in Google Maps per iOS

chiamata uno dei diversi metodi che consentono di animare la telecamera in movimento in una nuova posizione. Puoi controllare la durata dell'animazione con CoreAnimation.

Per la vita di me, non riesco a capire come controllare la durata dell'animazione. Ho provato con animazioni UIView, come:

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

E ho guardato animazioni CALayer in Core Animation. Tuttavia, non so come applicheresti l'animazione di un livello alla vista mappa.

Qualcuno può indicarmi la direzione giusta per favore?

risposta

38

ho trovato la risposta ... è possibile controllare la durata dell'animazione avvolgendo uno dei animato * metodi in una CATransaction, come questo:

[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

Avevo bisogno di :-) grazie. – user1007522

2

cosa un peccato che con gli stessi metodi che hai fornito lì non è un modo per sapere se l'animazione è finita.

Sì, lo so, c'è un blocco di completamento CATransaction utilizzando questo metodo, ma semplicemente non funziona! :(

[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]; 

E non posso usare MapView:. DidIdle hack per sapere che l'animazione è finita perché non sarà chiamato, se non v'è alcun cambiamento di posizione della macchina fotografica

qualcuno sa ? come rilevare animateon evento si è concluso

TROVATO UN FILO SU QUESTO (risolto): 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

Che funziona benissimo - grazie! –

9

per Swift 3.0:

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

Più grande è il valore (1,5 in questo caso), più lenta l'animazione.