MapKit iOS rendererForOverlay令人失控

时间:2017-11-13 00:35:23

标签: ios objective-c xcode mapkit mkmapview

我使用addOverlay和rendererForOverlay与MKMapView有一个MapKit问题。正在使用Xcode 9.1(9B55)在设备(iPhone 7 iOS 11.1.1)上进行测试和调试。正在为地图视图中的所有切片重复刷新叠加渲染器(每秒2500次调用以绘制MapRect :)。对渲染器的调用忽略setNeedsDisplayInMapRect中更改的矩形:并且不是由setNeedsDisplayInMapRect启动的。即使在使用Xcode报告应用程序使用超过160%的CPU完成所有地图更新之后,这种刷新仍将永远持续。

Xcode Debug Navigator Image Link

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

1 个答案:

答案 0 :(得分: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时没有调用:。