iOS GoogleMaps SDK - animateToCameraPosition动画完成处理程序?

Rob*_*ndl 13 animation ios google-maps-mobile google-maps-sdk-ios

目前,我正在使用适用于iOS的GoogleMaps SDK进行各种操作.打电话的时候

[self.googleMapsView animateToCameraPosition:[GMSCameraPosition 
                            cameraWithLatitude:LATITUDE
                                     longitude:LONGITUDE
                                          zoom:ZOOM]];
Run Code Online (Sandbox Code Playgroud)

是否有完成处理程序来确定动画是否完成?

当然我得到关于cameraPosition的GMSMapViewDelegate更新,但我该如何检查动画是否完成?

- (void)mapView:(GMSMapView *)mapView 
didChangeCameraPosition:(GMSCameraPosition *)position;
Run Code Online (Sandbox Code Playgroud)

ton*_*y m 18

对于这个帖子的读者未来的参考,谷歌地图SDK iOS版2013年7月发布的版本1.4.0增加了新的委托方法的MapView:idleAtCameraPosition:这将在任何相机移动年底被解雇-无论是程序化的动画像在这个问题或用户触发的动作.


Bry*_*mas 9

这可能有效(我还没试过):

[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat: 1.0f] forKey:kCATransactionAnimationDuration];
[self.googleMapsView animateToCameraPosition:[GMSCameraPosition 
                        cameraWithLatitude:LATITUDE
                                 longitude:LONGITUDE
                                      zoom:ZOOM]];
[CATransaction setCompletionBlock:^{
    // ... whatever you want to do when the animation is complete
}];
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)

基本上,这会创建一个动画事务动画来动画您的相机移动(更改值numberWithFloat:以更改速度),并设置自己的完成块,说明动画结束时您想要做什么. [CATransaction commit]什么是动画关闭.

注意:这个答案部分基于这个答案.

  • 这不适合我.在动画结束之前调用完成块 (2认同)

and*_*ons 2

我不相信有,但是......

到目前为止,对我来说效果很好的方法是设置一个计时器,在位置停止更新后不久(非常)触发:

- (void)mapView:(GMSMapView*)mapView didChangeCameraPosition:(GMSCameraPosition*)position {
  // _panTimer is an instance variable of the delegate.
  [_panTimer invalidate];
  _panTimer = [NSTimer timerWithTimeInterval:0.2
                                      target:self
                                    selector:@selector(_mapHasStoppedMoving)
                                    userInfo:nil
                                     repeats:NO];
  [[NSRunLoop currentRunLoop] addTimer:_panTimer forMode:NSDefaultRunLoopMode];
}
Run Code Online (Sandbox Code Playgroud)