ios – 检测GMSMapView缩放

ios – 检测GMSMapView缩放,第1张

概述有没有办法在这个Google Map Services组件中检测缩放(捏合和双击)? - (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture 以上方法无论动作如何都会发生火灾. 还有另一种方法可以检测何时缩放(或任何其他属性)已经改变 – 键值观察(又名KVO).当没有为我们提供的委托方法时,它特别有用.来自Apple docs: 有没有办法在这个Google Map Services组件中检测缩放(捏合和双击)?

- (voID)mapVIEw:(GMSMapVIEw *)mapVIEw willMove:(BOol)gesture

以上方法无论动作如何都会发生火灾.

解决方法 还有另一种方法可以检测何时缩放(或任何其他属性)已经改变 – 键值观察(又名KVO).当没有为我们提供的委托方法时,它特别有用.来自Apple docs:

Key-value observing provIDes a mechanism that allows objects to be
notifIEd of changes to specific propertIEs of other objects.

无论您在何处设置地图视图,请添加以下代码段:

[self.mapVIEw addobserver:self forKeyPath:@"camera.zoom" options:0 context:nil];

现在你只需要实现-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;    }}

不要忘记根据您的需要删除-dealloc或-vIEwDIDdissapear中的观察者:

- (voID)dealloc {    [self.mapVIEw removeObserver:self forKeyPath:@"camera.zoom"];}

快乐的编码:-)

总结

以上是内存溢出为你收集整理的ios – 检测GMSMapView缩放全部内容,希望文章能够帮你解决ios – 检测GMSMapView缩放所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1008712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存