我正在使用子类MKOverlay
和子类MKOverlayView
来显示 WMS 磁贴。让它运行良好。
MKOverlayView
当我完成显示瓷砖时,我遇到了删除的问题。我可以删除MKOverlay
就好了:
-(void)removeWMSOverlay {
for (WMSOverlay *overlay in self.mapView.overlays) {
if ([overlay isKindOfClass:[WMSOverlay class]]) {
MKOverlayView *test = [self.mapView viewForOverlay:overlay];
[self.mapView removeOverlay:overlay];
}
}
}
但是WMSOverlayView
仍然存在并且仍在运行其代码(不断检查是否可以绘制新图块),这会产生一些滞后。
我不知道在哪里可以找到MKOverlayViews
活跃的列表。我试过:
-(void)removeWMSOverlay {
for (WMSOverlay *overlay in self.mapView.overlays) {
if ([overlay isKindOfClass:[WMSOverlay class]]) {
MKOverlayView *test = [self.mapView viewForOverlay:overlay];
[self.mapView removeOverlay:overlay];
[test removeFromSuperview];
test = nil;
}
}
}
没有效果。代码仍在运行。
甚至试图将它的引用保持为零:
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
if ([overlay isKindOfClass:[WMSOverlay class]]) {
WMSOverlayView *view = [[WMSOverlayView alloc] initWithOverlay:overlay];
view.alpha = .8;
self.wmsOverlayView = view;
return view;
}
return FALSE;
}
-(void)removeScene {
for (WMSOverlay *overlay in self.mapView.overlays) {
if ([overlay isKindOfClass:[WMSOverlay class]]) {
[self.mapView removeOverlay:overlay];
self.wmsOverlayView = nil;
}
}
}
我可以删除MKOverlayView
还是我需要弄清楚如何重用视图?
编辑:
我尝试重用MKOverlayView
:
else if ([overlay isKindOfClass:[WMSOverlay class]]) {
self.wmsOverlayView = [[WMSOverlayView alloc] initWithOverlay:overlay];
return self.wmsOverlayView;
}
并添加了一个计时器来显示不止一个 MKOverLayView 正在运行:
-(void)amIStillHere {
DLog("I'M STILL RUNNING | self: %@", self);
}
它们不会被重复使用或消失:
DEBUG | -[WMSOverlayView startTimer] | I'M STILL RUNNING | self: <WMSOverlayView: 0x1d84afe0; frame = (6.02801e+07 9.44092e+07; 2.30324e+06 2.10344e+06); opaque = NO; layer = <MKOverlayClusterProxyLayer: 0x21bf3ff0>>
DEBUG | -[WMSOverlayView startTimer] | I'M STILL RUNNING | self: <WMSOverlayView: 0x21be1a80; frame = (6.06487e+07 9.2838e+07; 2.36776e+06 2.15038e+06); opaque = NO; layer = <MKOverlayClusterProxyLayer: 0x1d8e2a20>>