Pergunta

Temo que este seja um código maligno:

CGRect iRect = CGRectMake(0.0f, 0.0f, 320.0f, 400.0f);
UIImageView *imgView = [[UIImageView alloc] initWithFrame:iRect];
imgView.animationImages = [NSArray arrayWithObjects:
                [UIImage imageNamed:@"b0001.png"],
                [UIImage imageNamed:@"b0002.png"],
                // 150 more
                [UIImage imageNamed:@"b0152.png"],
                nil];

Lembro-me um pouco daquela imagemNamed:é mau.Se eu fizer assim, e eu ter para fornecer objetos UIImage, esses objetos UIImage carregam imediatamente esses arquivos de imagem na memória, certo?E, além disso, todos esses 152 objetos UIImage pesados ​​fazem uma grande pausa na memória porque são liberados automaticamente, não é?

Concluindo, usar essa técnica é uma droga.Não é?Não sei.No meu antigo iPod touch de primeira geração, isso parece funcionar sem atraso a 25 fps.Muito suave e agradável.A única coisa que temo é que alguns outros dispositivos possam pensar diferente sobre isso.Embora eu tenha o iPod touch programável mais fraco disponível.

De qualquer forma, alguém vê alguma possibilidade de melhoria aí?Ou não devo usar isso e usar setImage:do UIImageView em um algoritmo próprio que carregaria e definiria essas imagens com seletores atrasados ​​​​usando aquela coisa robusta de imageWithContentsOfFile (pode ter um nome diferente), sem liberação automática?Talvez algum cara inteligente tenha escrito uma pequena biblioteca para vídeos de polegar de alto desempenho que consistem em sequências de imagens?

(não, o vídeo não é uma opção no iphone;os frameworks da Apple para isso suportam apenas tela cheia, e não sei de mais nada que possa fazer isso)

Foi útil?

Solução

Eu evitaria tentar carregar tantas imagens em um array UIImageView.Uma pergunta semelhante foi perguntou aqui.O método de buffer que descrevo também deve se aplicar à sua situação.

Outras dicas

Você está certo sobre imageNamed ...você não deve usá-lo em muitos casos, pois ele armazena a imagem em cache internamente.Usar:

[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image1" ofType:@"png"];

A única vez que você deseja usar imageNamed é quando

1) Você está reutilizando um ícone repetidamente (tableviews etc...)
2) Você não implementou seu próprio sistema de cache

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