我使用子類型MKOverlay
和子類型MKOverlayView
來顯示WMS切片。運行良好。刪除自定義MKOverlayView
當我完成顯示圖塊時,我遇到了刪除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>>