首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MKCircleOverlay添加到MKMapView时无法识别的选择器[MKCircle pointCount]

将MKCircleOverlay添加到MKMapView时无法识别的选择器[MKCircle pointCount]
EN

Stack Overflow用户
提问于 2016-11-07 09:50:52
回答 2查看 635关注 0票数 0

我正在使用Objective C为iOS 9.0及更高版本开发一个应用程序。

这个应用程序包括一个带有MKMapView对象的视图控制器。视图控制器是映射视图委托。

我在实现viewWillAppear: MKCircle时遇到了添加动画覆盖的问题。

使用addOverlay:level:方法不能解决问题。

其实现如下所示:

代码语言:javascript
复制
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.mapView setDelegate:self];
    [self.mapView setZoomEnabled:YES];
    [self.mapView setScrollEnabled:YES];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.locationCircle = [MKCircle circleWithCenterCoordinate:self.locationPin.coordinate radius:1000000.0];
    [self.mapView addOverlay:self.locationCircle];
}

- (MKOverlayRenderer *)rendererForOverlay:(id<MKOverlay>)overlay {
    if ([overlay isKindOfClass:[MKCircle class]]) {
        MKCircleRenderer *renderer = [[MKCircleRenderer alloc] initWithCircle:(MKCircle *)overlay];
        renderer.fillColor = [[UIColor yellowColor] colorWithAlphaComponent:0.25];
        return renderer;
    } else {
        return [self.superclass rendererForOverlay:overlay];
    }
}

具体地说,一旦地图视图试图显示圆圈覆盖的任何部分,应用程序就会崩溃。

该应用程序正在成功地在地图视图上渲染多边形覆盖和各种图钉注释。错误消息详细信息为:

代码语言:javascript
复制
2016-11-07 12:35:21.643 [MKCircle pointCount]: unrecognized selector sent to instance 0x6000004902c0
2016-11-07 12:35:21.645 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MKCircle pointCount]: unrecognized selector sent to instance 0x6000004902c0'
*** First throw call stack:
(
0   CoreFoundation                      0x000000010cdc334b __exceptionPreprocess + 171
1   libobjc.A.dylib                     0x000000010c82421e objc_exception_throw + 48
2   CoreFoundation                      0x000000010ce32f34 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3   CoreFoundation                      0x000000010cd48c15 ___forwarding___ + 1013
4   CoreFoundation                      0x000000010cd48798 _CF_forwarding_prep_0 + 120
5   MapKit                              0x0000000109af40a3 CreatePathForPolygon.38297 + 57
6   MapKit                              0x0000000109af3e4c -[MKPolygonRenderer createPath] + 128
7   MapKit                              0x0000000109aeefda -[MKOverlayPathRenderer drawMapRect:zoomScale:inContext:] + 72
8   MapKit                              0x0000000109aefd89 __47-[MKOverlayRenderer overlay:drawKey:inContext:]_block_invoke + 671
9   MapKit                              0x0000000109aefdda _worldsForBounds.37697 + 58
10  MapKit                              0x0000000109aef99f -[MKOverlayRenderer overlay:drawKey:inContext:] + 224
11  VectorKit                           0x00000001170e0534 __40-[VKRasterOverlayTileSource _queueDraw:]_block_invoke + 484
12  libdispatch.dylib                   0x000000010de3a980 _dispatch_call_block_and_release + 12
13  libdispatch.dylib                   0x000000010de640cd _dispatch_client_callout + 8
14  libdispatch.dylib                   0x000000010de43499 _dispatch_queue_override_invoke + 1733
15  libdispatch.dylib                   0x000000010de453b7 _dispatch_root_queue_drain + 720
16  libdispatch.dylib                   0x000000010de4508b _dispatch_worker_thread3 + 123
17  libsystem_pthread.dylib             0x000000010e20d4de _pthread_wqthread + 1129
18  libsystem_pthread.dylib             0x000000010e20b341 start_wqthread + 13
)
libc++abi.dylib: terminating with uncaught exception of type NSException

在实验中,我发现,如果圆形覆盖图位于地图上未显示在屏幕上的部分,则可以在不使应用程序崩溃的情况下添加圆覆盖图。一旦用户平移到地图上圆圈所在的部分,就会发生崩溃。

将模拟器与iOS 10.1和iOS 9.0一起使用时出现错误。

任何关于为什么会发生这种情况的想法都将非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2019-02-20 23:10:36

swift 4.2版本。添加以下委托。我正在向MapView添加Circle和PolyLine。所以需要在委托中处理这两个问题。

代码语言:javascript
复制
  func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    if overlay is MKCircle {
      let renderer = MKCircleRenderer(overlay: overlay)
      renderer.fillColor = UIColor.black.withAlphaComponent(0.3)
      renderer.strokeColor = UIColor.red
      renderer.lineWidth = 1
      return renderer
    }
    let polyLine = MKPolylineRenderer.init(overlay: overlay)
    polyLine.strokeColor = UIColor.green
    return polyLine
  }
票数 1
EN

Stack Overflow用户

发布于 2016-11-07 13:04:00

感谢大家的参与。最后的问题是因为一个不正确的方法签名:

代码语言:javascript
复制
- (MKOverlayRenderer *)rendererForOverlay:(id<MKOverlay>)overlay

这应该是:

代码语言:javascript
复制
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay

这没有引起更广泛的问题,因为在代码中的其他地方有另一个具有正确签名的方法实现。该方法试图将MKCircle视为MKPolygon,因此触发了pointCount问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40456706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档