Rimuovere visualizzazione secondaria UIImageView da UIScrollView
Domanda
Ciao ho un UIScrollView e ho un oggetto di UIImageView all'interno della UIScrollView. Comincio l'applicazione. poi ho scorrere verso destra alla ScrollView ei cambiamenti ScrollView ma non riesco a vedere l'oggetto UIImageView successivo che aggiungo a - scrollViewDidEndDecelerating (void): (UIScrollView *) ScrollView. prima che aggiungo l'oggetto successivo rimuovo il precedente ... che cosa è sbagliato?
per rimuovere l'oggetto che uso
UIImageView *l;
for (NSInteger ko=0; ko<[[scroll subviews] count]; ko++){
if ([[[scroll subviews] objectAtIndex:0] isKindOfClass:[UIImageView class]]){
//This code never gets hit
l=[[scroll subviews] objectAtIndex:0];
[l removeFromSuperview];
l=nil;
}
}
poi aggiungo l'oggetto successivo
[scorrere addSubview: IMAGEVIEW];
I rimuovere l'oggetto precedente, perché i miei si blocca app quando aggiungo 110 immagini al ScrollView quindi devo gestire la memoria credo. Questo è il motivo per cui io rimuovere l'oggetto precedente.
Chiunque aiuto per favore!
Soluzione
Un paio di suggerimenti per farti sulla strada giusta:
-
Se credi che la memoria è un problema, partizionare il problema. Per esempio aggiungere / rimuovere 10 immagini alla volta.
-
La proprietà tag di un UIView è il tuo migliore amico quando si cerca di evitare il mantenimento di problemi con i propri loop. È possibile impostare un tag specifico per le UIImageViews quando ne hai bisogno, e quindi cercare il tag utilizzando [UIView viewWithTag: tag]; Funziona in modo ricorsivo.
-
st3fan solleva un ottimo punto sulla modificazione concorrente. In generale, un buon modo per evitarlo è quello di aggiungere un "delezione matrice" e quindi removeObjectsInArray.
Altri suggerimenti
Il primo problema che vedo è che si sta loop su un array, mentre anche modificandolo. Anche l'indice del ciclo ko
non viene utilizzato ovunque. È sempre afferra collo 0.
Che dire:
NSArray* subviews = [[NSArray alloc] initWithArray: scroll.subviews];
for (UIView* view in subviews) {
if ([view isKindOfClass:[UIImageView class]]) {
[view removeFromSuperview];
}
}
[subviews release];
Non è che esattamente quello che stai cercando di fare?