Pergunta

Olá, eu tenho um UIScrollView e tenho um objeto de UIImageView dentro do UIScrollView. Eu inicio o aplicativo. Em seguida, eu role para a direita no ScrollView e as mudanças do scrollView, mas não consigo ver o próximo objeto UiImageView que eu adiciono em - (void) scrollViewDidendDeCelerating: (UIScrollView *) scrollView. Antes de adicionar o próximo objeto, removo o anterior ... o que está errado?

Para remover o objeto que eu 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;

        }
    }

Então eu adiciono o próximo objeto

Scroll AddSubView: ImageView];

Eu removo o objeto anterior porque meu aplicativo trava quando adiciono 110 imagens no scrollView, então eu tenho que gerenciar a memória, eu acho. É por isso que removo o objeto anterior.

Qualquer pessoa ajuda, por favor!

Foi útil?

Solução

Algumas sugestões para colocá -lo no caminho certo:

  1. Se você acredita que a memória é um problema, participe o problema. Por exemplo, adicione/remova 10 imagens por vez.

  2. A propriedade TAG de um UIView é sua melhor amiga ao tentar evitar manter problemas com seus próprios loops. Você pode definir uma tag específica para o seu UIImageViews quando precisar delas e, em seguida, procure a tag usando [uiview viewwithTag: tag]; Funciona recursivamente.

  3. O ST3FAN traz um ponto muito bom sobre a modificação simultânea. Em geral, uma boa maneira de evitá -lo é adicionar a uma "matriz de exclusão" e depois remover oBjectSinary.

Outras dicas

O primeiro problema que vejo é que você está em uma matriz enquanto também a modifica. Também seu ko O índice de loop não é usado em nenhum lugar. Você sempre pega o item 0.

A respeito:

NSArray* subviews = [[NSArray alloc] initWithArray: scroll.subviews];
for (UIView* view in subviews) {
    if ([view isKindOfClass:[UIImageView class]]) {
         [view removeFromSuperview];
    }
}
[subviews release];

Não é exatamente isso que você está tentando fazer?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top