MapKit iOS rendererForOverlay 刷新失控

Posted

技术标签:

【中文标题】MapKit iOS rendererForOverlay 刷新失控【英文标题】:MapKit iOS rendererForOverlay refreshing out of control 【发布时间】:2017-11-13 00:35:22 【问题描述】:

我有一个使用 addOverlay 和 rendererForOverlay 的 MKMapView 的 MapKit 问题。正在使用 Xcode 9.1 (9B55) 的设备 (iPhone 7 ios 11.1.1) 上进行测试和调试。覆盖渲染器正在为地图视图中的所有图块重复刷新(每秒 2500 次调用 drawMapRect:)。对渲染器的调用忽略了 setNeedsDisplayInMapRect: 中更改的矩形:并且不是由 setNeedsDisplayInMapRect 发起的。即使在所有地图更新完成且 Xcode 报告应用程序使用超过 160% 的 CPU 后,这种刷新也会永远持续。

Xcode Debug Navigator Image Link

MKMapView 代码基于https://developer.apple.com/library/content/samplecode/Breadcrumb/Introduction/Intro.html 提供的 Apple 示例代码“BreadCrumb”。此代码没有重大的结构更改。 有没有其他人经历过这种情况或对从哪里开始寻找解决方案有任何建议?

【问题讨论】:

感谢分享您的发现!请将问题作为问题并在下面发布解决方案作为答案。是okay to answer your own question,但你需要遵循格式。 【参考方案1】:

运行 Apple Breadcrumb 示例没有出现同样的问题。在将它放回我的项目并添加我的项目中的更改后,我终于能够将问题隔离到将'self.alpha = 0.5'插入drawMapRect:中。不管 alpha 属性设置为 1.0 还是其他值,问题都会出现。

- (void)drawMapRect:(MKMapRect)mapRect
          zoomScale:(MKZoomScale)zoomScale
          inContext:(CGContextRef)context;

    CrumbPath *crumbs = (CrumbPath *)(self.overlay);
    self.alpha = 0.5;     //   <-------- THE PROBLEM

问题解决后,覆盖渲染器调用恢复到每秒 40 到 80 次,没有地图更新和调用 setNeedsDisplayInMapRect:.

【讨论】:

这简直救了我的命!!!!谢谢你!!!我只是将 alpha 放在 init 中,然后修复了它!!!

以上是关于MapKit iOS rendererForOverlay 刷新失控的主要内容,如果未能解决你的问题,请参考以下文章

iOS 5 MapKit,MKPlacemark,在 iOS 5 上运行 iOS 4.3 应用程序

iOS MapKit,细节较少

iOS 6 上的 MapKit 崩溃

IOS/MapKit:通过单击 MKPlacemark 启动本机地图应用程序

iOS 7 中的 Mapkit 路由

使用 MapKit 在 IOS 地图上放置图钉? [关闭]