gpt4 book ai didi

ios - 是否可以在滚动/缩放时连续跟踪 MKMapView 区域?

转载 作者:可可西里 更新时间:2023-11-01 03:09:10 24 4
gpt4 key购买 nike

当用户缩放或滚动 map 时,我想根据 MKMapView 不断更新我的 UI。 (不仅在滚动结束后,效果很好。)

我尝试了委托(delegate)方法 mapView:regionWillChangeAnimated:,根据文档,“只要当前显示的 map 区域发生变化,就会调用该方法。在滚动期间,可能会多次调用此方法来报告 map 位置的更新。” https://developer.apple.com/documentation/mapkit/mkmapviewdelegate

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
[self updateUIAcordingToMapViewRegionChange];
}

但不幸的是,这不起作用,因为文档似乎没有说实话。该方法仅在区域更改开始时调用一次。在滚动期间,当手指向下移动时,不会再次调用该方法。

我能找到的关于这个问题的唯一帖子是 macrumors 成员 namanhams: http://forums.macrumors.com/showthread.php?t=1225172但是没有人提出任何想法......

作为一种解决方法,我尝试在 regionWillChange 中设置一个计时器(并在 regionDidChange 中使其无效):

- (void)handleRegionChange:(NSTimer*)timer
{
[self updateUIAcordingToMapViewRegionChange];
}

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
self.mapRegionIsChangingTimer = [NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(handleRegionChange:)
userInfo:nil
repeats:YES];
}

但这也行不通。滚动结束后立即执行所有来自计时器的方法调用。好像滚动 mapView 阻塞了主线程之类的……

我也在stackoverflow上看了这篇帖子,可惜没完全看懂: Monitor MKMapView redraw events因此,如果我的问题的解决方案确实存在于该 SO 线程中,请告诉我,我将尝试深入研究它的细节。

我仍然希望我只是太愚蠢或太盲目而无法找到正确的委托(delegate)方法,并且非常感谢处理 MKMapView 区域跟踪的任何提示、解决方法和最佳实践。

最佳答案

这会起作用:

@interface MapViewController () {
NSTimer *_updateUITimer;
}

@end

@implementation MapViewController

- (void)viewDidLoad
{
[super viewDidLoad];

_updateUITimer = [NSTimer timerWithTimeInterval:0.1
target:self
selector:@selector(updateUI)
userInfo:nil
repeats:YES];

[[NSRunLoop mainRunLoop] addTimer:_updateUITimer forMode:NSRunLoopCommonModes];

}

- (void)dealloc
{
[_updateUITimer invalidate];
}

- (void)updateUI
{
// Update UI
}

@end

另一种方法是在 mapView:regionWillChangeAnimated 中创建计时器并在 mapView:regionDidChangeAnimated 中使其无效。

关于ios - 是否可以在滚动/缩放时连续跟踪 MKMapView 区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10796058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com