在Google Maps for iOS中控制动画持续时间

时间:2013-03-27 15:02:56

标签: ios animation google-maps-sdk-ios

Google Maps for iOS的文档说明:

  

调用几种方法中的一种,可让您为移动到新位置的相机设置动画。您可以使用CoreAnimation控制动画的持续时间。

对于我的生活,我无法弄清楚如何控制动画持续时间。我尝试过使用UIView动画,例如:

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

我看过CoreAnimation中的CALayer动画。但是,我不知道如何将图层动画应用于地图视图。

有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:40)

我找到了答案......您可以通过在CATransaction中包装一个animate *方法来控制动画持续时间,如下所示:

   [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 :(得分:12)

for 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),动画越慢。

答案 2 :(得分:6)

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

答案 3 :(得分:2)

使用你提供的相同方法,我们无法知道动画是否结束了。

是的我知道,有一个 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 completion being called immediately