Управление продолжительностью анимации в Картах Google для iOS
Документация для Google Maps для iOS гласит, что:
Вызовите один из нескольких способов, которые позволяют анимировать перемещение камеры в новое место. Вы можете управлять продолжительностью анимации с помощью CoreAnimation.
В течение жизни я не могу понять, как контролировать продолжительность анимации. Я попытался использовать анимацию UIView, например:
[UIView animateWithDuration: 5 animations:^{
GMSCameraPosition *camera = [self newCamera];
self.mapView.camera = camera;
} completion:^(BOOL finished) {
}];
И я посмотрел анимацию CALayer в CoreAnimation. Однако я не знаю, как применить анимацию слоя к виду карты.
Может кто-нибудь указать мне в правильном направлении?
Ответы
Ответ 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 немедленно вызывается