控制动画时间在谷歌地图iOS版(Controlling Animation Duration in

2019-08-18 02:12发布

谷歌地图iOS版文档指出:

打电话的几种方法,让您动画摄像机移动到新位置的一个。 您可以控制与CoreAnimation动画的持续时间。

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

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

我已经看了看CoreAnimation CALayer的动画。 但是,我不知道你将如何应用层动画地图视图。

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

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


Answer 2:

对于雨燕3.0:

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

的(在这种情况下1.5)的值越大,越慢的动画。



Answer 3:

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


Answer 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完成被立即调用



文章来源: Controlling Animation Duration in Google Maps for iOS