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:这将在任何相机移动年底被解雇-无论是程序化的动画像在这个问题或用户触发的动作.
这可能有效(我还没试过):
[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]什么是动画关闭.
注意:这个答案部分基于这个答案.
我不相信有,但是......
到目前为止,对我来说效果很好的方法是设置一个计时器,在位置停止更新后不久(非常)触发:
- (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)