Cyr*_*ril 6 iphone google-maps objective-c ios gmsmapview
有没有办法在这个Google Map Services组件中检测缩放(捏合和双击)?
- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture
Run Code Online (Sandbox Code Playgroud)
以上方法无论动作如何都会发生火灾.
还有另一种方法可以检测何时缩放(或任何其他属性)已经改变 - 键值观察(又名KVO).当没有为我们提供的委托方法时,它特别有用.来自Apple 文档:
键值观察提供了一种机制,允许对象通知其他对象的特定属性的更改.
无论您在何处设置地图视图,请添加以下代码段:
[self.mapView addObserver:self forKeyPath:@"camera.zoom" options:0 context:nil];
Run Code Online (Sandbox Code Playgroud)
现在,您只需实现-observeValueForKeyPath:ofObject:change:context:实际接收回调的方法.像这样:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"camera.zoom"]) {
// this static variable will hold the last value between invocations.
static CGFloat lastZoom = 0;
GMSMapView *mapView = (GMSMapView *)object;
CGFloat currentZoom = [[mapView camera] zoom];
if (!(fabs((lastZoom) - (currentZoom)) < FLT_EPSILON)) {
//Zoom level has actually changed!
NSLog(@"Zoom changed to: %.2f", [[mapView camera] zoom]);
}
//update last zoom level value.
lastZoom = currentZoom;
}
}
Run Code Online (Sandbox Code Playgroud)
不要忘记删除观察员-dealloc或-viewDidDissapear根据您的需要:
- (void)dealloc {
[self.mapView removeObserver:self forKeyPath:@"camera.zoom"];
}
Run Code Online (Sandbox Code Playgroud)
快乐的编码:-)
小智 4
GMSMapViewDelegate我希望你在头文件中使用过
在作为GMSMapView对象委托的实现文件中使用以下代码
-(void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition*)position {
float zoom = mapView.camera.zoom;
// handle you zoom related logic
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5287 次 |
| 最近记录: |