red*_*ft5 12 objective-c mapkit ios
当用户在选择注释时点击保存时,我正在尝试保存mapview的缩略图.当用户尚未放大该注释时,会出现此问题,因此尚未加载关闭缩放级别.
这是用户点击保存后我正在做的事情:
但是,当保存图像并且视图被取消时,实际保存的结果图像实际上还没有完成加载,因为我仍然看到带有网格线的卸载地图,如下所示:
我的问题是,在保存此缩略图之前,如何确保地图已完成加载并完成显示?
Sko*_*tch 18
更新:iOS7有一个新的委托可能已修复此问题.我还没有证实这种或那种方式.
- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
Run Code Online (Sandbox Code Playgroud)
预iOS6支持:
mapViewDidFinishLoadingMap
:似乎不可靠.我注意到它有时根本不被调用,特别是如果地图图块已经被缓存,有时它被多次调用.
我注意到,当多次调用它时,最后一次调用将正确呈现.因此,如果您在用户点击保存后设置2秒计时器,我认为您可以使用此功能.禁用交互以便不会发生任何其他情况,并在计时器启动时启用用户交互.
如果mapViewDidFinishLoadingMap
被调用将来再次重置计时器2秒.当计时器最终关闭时,获取地图的快照,它应该是正确的.
您还需要考虑其他回调,例如mapViewDidFailLoadingMap
.也可以在嘈杂的连接上进行测试,因为如果需要很长时间来获取磁贴,则2秒可能不够长.
- (void)restartTimer
{
[self.finishLoadingTimer invalidate];
self.finishLoadingTimer = [NSTimer scheduledTimerWithTimeInterval:2.0
target:self
selector:@selector(mapLoadingIsFinished)
userInfo:nil
repeats:NO];
}
- (void)userClickedSave
{
assert(self.saving == NO);
if (self.saving == NO) {
self.saving = YES;
assert(self.finishLoadingTimer == nil);
self.view.userInteractionEnabled = NO;
[self restartTimer];
}
}
- (void)mapLoadingIsFinished
{
self.finishLoadingTimer = nil;
[self doSnapshotSequence];
self.saving = NO;
self.view.userInteractionEnabled = YES;
}
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
if (self.saving) {
[self restartTimer];
}
}
Run Code Online (Sandbox Code Playgroud)
如果为iOS7开发,最好使用的委托是:mapViewDidFinishRenderingMap:fullyRendered:
mapViewDidFinishRenderingMap:fullyRendered
归档时间: |
|
查看次数: |
7743 次 |
最近记录: |