Pergunta

Eu estou usando um monte de CALayers, criando uma imagem baseada em azulejo e não ao contrário GoogleMaps (diferentes versões da mesma imagem com mais / menos detalhe).

O código que estou usando para fazer isso é:

UIImage* image = [self loadImage:obj.fileName zoomLevel:obj.zoomLevel];
[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];
obj.layerToAddTo.contents = [image CGImage];
[CATransaction commit];

Eu realmente não sinto como carregar o CGImage de arquivo usando CoreGraphics porque eu sou preguiçoso. Mas eu se há um grande aumento de desempenho! LoadImage apenas mangles uma corda para obter o caminho certo para o carregamento da referida imagem, e obj é um NSObject-estrutura que mantém tudo o que preciso a informação para esta discussão.

Ajuda?

Foi útil?

Solução

Não há um grande aumento de desempenho - se alguma coisa é o contrário. Ao ir throuh UIImage para carregar suas imagens, você poderá obter todos os benefícios de cache que ele faz para você e vai ser uma criatura muito rápida para uso com seus vários CALayers.

Outras dicas

Eu apenas tentei isso e usando CoreGraphics puros para carregar a imagem em vez de usar UIImage deu uma melhoria de velocidade perceptível ao carregar muitas imagens de uma só vez.

"Eu apenas tentei isso e usando CoreGraphics puros para carregar a imagem em vez de usar UIImage deu uma melhoria de velocidade perceptível ao carregar muitas imagens de uma só vez."

Como você evitar o uso de um UIImage? Ou, mais precisamente, como você carregar um arquivo de imagem diretamente no CoreGraphics sem passar por um UIImage?

Uma das razões por que não usar UIImage -imageNamed: para carregar as imagens é que eles são armazenados no cache interno e que o cache não é limpo em baixa situação de memória.

Eu não tenho uma resposta definitiva, mas eu acho que você veria um tempo de carregamento mais lento quando se utiliza UIImage do que você veria ao usar CGImage. Com CGImage, você especifica o tipo de imagem (jpg ou png) durante a criação, mas com UIImage, o tipo de objeto precisa ser determinado dinamicamente. Evidentemente, este é provavelmente tão simples como olhar para os primeiros bytes do arquivo de imagem, mas pode não ser.

Uma vez que a imagem é realmente em uso, eu não poderia imaginar que haveria alguma diferença entre usar o CGImage que representa internamente um UIImage vs. usando um CGImage você mesmo criou. Eu acho que eles seria exatamente equivalente.

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