Подтвердить что ты не робот

Управление продолжительностью анимации в Картах Google для iOS

Документация для Google Maps для iOS гласит, что:

Вызовите один из нескольких способов, которые позволяют анимировать перемещение камеры в новое место. Вы можете управлять продолжительностью анимации с помощью CoreAnimation.

В течение жизни я не могу понять, как контролировать продолжительность анимации. Я попытался использовать анимацию UIView, например:

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

И я посмотрел анимацию CALayer в CoreAnimation. Однако я не знаю, как применить анимацию слоя к виду карты.

Может кто-нибудь указать мне в правильном направлении?

4b9b3361

Ответ 1

Я нашел ответ... вы можете контролировать продолжительность анимации, обернув один из анимированных * методов в CATransaction, например:

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

Ответ 2

для Swift 3.0:

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

Чем больше значение (в данном случае 1,5), тем медленнее анимация.

Ответ 3

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()

Ответ 4

какая питти, использующая те же методы, которые вы вам предоставили, не знает, закончилась ли анимация.

Да, я знаю, что этот блок CATransaction завершает, но он просто не работает!: (

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

И я не могу использовать MapView: didIdle, чтобы узнать, что анимация закончилась, потому что она не будет вызываться, если нет изменения положения камеры.

Кто-нибудь знает, как обнаружить animateon, закончилось событие?

НАЙДЕНА РЕЗЬБА ОБ ЭТОМ (РЕШЕННАЯ): Закрытие CATransaction немедленно вызывается