Eu tenho um URL para uma imagem (peguei no UIImagePickerController), mas não tenho mais a imagem na memória (o URL foi salvo de uma execução anterior do aplicativo). Posso recarregar a UIImage do URL novamente?
Vejo que UIImage tem um imageWithContentsOfFile: mas tenho um URL. Posso usar o dataWithContentsOfURL do NSData: para ler a URL?
EDIT1
com base na resposta de @ Daniel, tentei o código a seguir, mas ele não funciona ...
NSLog(@"%s %@", __PRETTY_FUNCTION__, photoURL);
if (photoURL) {
NSURL* aURL = [NSURL URLWithString:photoURL];
NSData* data = [[NSData alloc] initWithContentsOfURL:aURL];
self.photoImage = [UIImage imageWithData:data];
[data release];
}
Quando o executei, o console mostra:
-[PhotoBox willMoveToWindow:] file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG
*** -[NSURL length]: unrecognized selector sent to instance 0x536fbe0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL length]: unrecognized selector sent to instance 0x536fbe0'
Olhando para a pilha de chamadas, estou chamando URLWithString, que chama URLWithString: relativeToURL:; em seguida, initWithString: relativeToURL :, depois _CFStringIsLegalURLString, CFStringGetLength, forwarding_prep_0 , forwarding_prep_0 , encaminhamento e , em seguida, - [NSObject doesNotRecognizeSelector].
Alguma idéia de por que meu NSString (o endereço do photoURL é 0x536fbe0) não responde por muito tempo? Por que diz que não responde a - [comprimento NSURL]? Não sabe que param é um NSString, não um NSURL?
EDIT2
OK, o único problema com o código é a conversão de string para URL. Se eu codificar a string, tudo funcionará bem. Então, algo está errado com o meu NSString e, se não consigo descobrir, acho que isso deve ser uma pergunta diferente. Com esta linha inserida (colei o caminho do log do console acima), ele funciona bem:
photoURL = @"file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG";
fonte
Respostas:
Você pode fazer desta maneira (de forma síncrona, mas compacta):
Uma abordagem muito melhor é usar o LazyTableImages da Apple para preservar a interatividade.
fonte
Você pode tentar o SDWebImage , ele fornece:
Exemplo rápido:
fonte
UIImageView
.SDWebImage
também permite que você preencha umUIImage
usando diretamenteSDWebImageManager
- (void) downloadWithURL:...
. Veja o exemplo deles no leia-me.E a versão rápida:
fonte
Se você está realmente , absolutamente positivamente certeza de que o NSURL é uma URL do arquivo, ou seja,
[url isFileURL]
é garantida para retornar verdade no seu caso, então você pode simplesmente usar:fonte
obtenha o DLImageLoader e tente seguir o código
Outro exemplo típico do mundo real do uso do DLImageLoader, que pode ajudar alguém ...
Como mencionei acima, outra grande biblioteca a considerar atualmente é Haneke (infelizmente não é tão leve).
fonte
Experimente este código, você pode definir o carregamento de uma imagem para que os usuários saibam que seu aplicativo está carregando uma imagem do URL:
fonte
Confira o
AsyncImageView
fornecido aqui . Um bom exemplo de código e pode até ser útil "pronto para uso" para você.fonte
O AFNetworking fornece carregamento de imagem assíncrona em um UIImageView com suporte a espaço reservado. Ele também suporta redes assíncronas para trabalhar com APIs em geral.
fonte
Certifique-se de ativar essas configurações no iOS 9:
As Configurações de segurança de transporte de aplicativos no Info.plist garantem o carregamento da imagem a partir do URL para permitir o download da imagem e configurá-la.
E escreva este código:
fonte
Como usar uma extensão Swift para
UIImageView
(código fonte aqui ):Criando propriedade computada para associados
UIActivityIndicatorView
Inicializador e setter personalizados
fonte
A melhor e mais fácil maneira de carregar uma imagem via URL é por este código:
Substitua
imgUrl
pelo seuImageURL
Substitua
imgView
pelo seuUIImageView
.Ele carregará a imagem em outro segmento, portanto, não diminuirá o carregamento do aplicativo.
fonte