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!

È stato utile?

Soluzione

Un paio di suggerimenti per farti sulla strada giusta:

  1. Se credi che la memoria è un problema, partizionare il problema. Per esempio aggiungere / rimuovere 10 immagini alla volta.

  2. 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.

  3. 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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top