J'utilise un sous-classé MKOverlay
et sous-classé MKOverlayView
pour afficher les tuiles WMS. Ça fonctionne bien.Supprimer un MKOverlayView personnalisé
Je suis confronté à la question de supprimer le MKOverlayView
lorsque j'ai fini d'afficher les tuiles. Je peux enlever le MKOverlay
très bien:
-(void)removeWMSOverlay {
for (WMSOverlay *overlay in self.mapView.overlays) {
if ([overlay isKindOfClass:[WMSOverlay class]]) {
MKOverlayView *test = [self.mapView viewForOverlay:overlay];
[self.mapView removeOverlay:overlay];
}
}
}
Mais le WMSOverlayView
est toujours là et toujours en cours d'exécution de son code (constamment vérifier si de nouvelles tuiles peuvent être tirer) qui crée un certain décalage.
Je ne sais pas où trouver une liste de MKOverlayViews
qui sont actifs. J'ai essayé:
-(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;
}
}
}
sans aucun effet. Le code est toujours en cours d'exécution.
Même essayé de garder une référence autour de zéro:
- (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;
}
}
}
Puis-je supprimer le MKOverlayView
ou dois-je comprendre comment réutiliser la vue?
EDIT:
J'ai essayé réutilisant le MKOverlayView
:
else if ([overlay isKindOfClass:[WMSOverlay class]]) {
self.wmsOverlayView = [[WMSOverlayView alloc] initWithOverlay:overlay];
return self.wmsOverlayView;
}
et ajouté une minuterie pour montrer que plus d'un MKOverLayView runing:
-(void)amIStillHere {
DLog("I'M STILL RUNNING | self: %@", self);
}
Ils ne sont pas réutilisés ou partez:
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>>