J'ai une URL pour une image (obtenue à partir de UIImagePickerController) mais je n'ai plus l'image en mémoire (l'URL a été enregistrée à partir d'une précédente exécution de l'application). Puis-je recharger UIImage à partir de l'URL?
Je vois que UIImage a un imageWithContentsOfFile: mais j'ai une URL. Puis-je utiliser dataWithContentsOfURL: de NSData pour lire l'URL?
EDIT1
basé sur la réponse de @ Daniel, j'ai essayé le code suivant mais cela ne fonctionne pas ...
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];
}
Quand je l'ai lancé, la console affiche:
-[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'
En regardant la pile d'appels, j'appelle URLWithString, qui appelle URLWithString: relativeToURL :, puis initWithString: relativeToURL :, puis _CFStringIsLegalURLString, puis CFStringGetLength, puis forwarding_prep_0 , puis transfert , puis - [NSObject doesNotRecognize].
Des idées pourquoi ma NSString (l'adresse de photoURL est 0x536fbe0) ne répond pas à la longueur? Pourquoi dit-il qu'il ne répond pas à - [longueur NSURL]? Ne sait-il pas que param est une NSString, pas une NSURL?
EDIT2
OK, le seul problème avec le code est la conversion de chaîne en URL. Si je code en dur la chaîne, tout le reste fonctionne bien. Donc, quelque chose ne va pas avec ma NSString et si je ne peux pas le comprendre, je suppose que cela devrait être une question différente. Avec cette ligne insérée (j'ai collé le chemin du journal de la console ci-dessus), cela fonctionne bien:
photoURL = @"file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG";
la source
Réponses:
Vous pouvez le faire de cette façon (de manière synchrone, mais compacte):
Une bien meilleure approche consiste à utiliser LazyTableImages d'Apple pour préserver l'interactivité.
la source
Vous pouvez essayer SDWebImage , il fournit:
Exemple rapide:
la source
UIImageView
.SDWebImage
vous permet également de remplirUIImage
directement un fichierSDWebImageManager
- (void) downloadWithURL:...
. Voir leur exemple sur le read me.Et la version rapide:
la source
Si vous êtes vraiment , absolument positivement sûr que le NSURL est une URL de fichier, à savoir
[url isFileURL]
est garanti pour retourner vrai dans votre cas, vous pouvez simplement utiliser:la source
obtenez DLImageLoader et essayez le code suivant
Un autre exemple typique du monde réel d'utilisation de DLImageLoader, qui peut aider quelqu'un ...
Comme je l'ai mentionné ci-dessus, une autre grande bibliothèque à considérer ces jours-ci est Haneke (malheureusement, elle n'est pas aussi légère).
la source
Essayez ce code, vous pouvez définir le chargement de l'image avec celui-ci, afin que les utilisateurs sachent que votre application charge une image à partir de l'url:
la source
Découvrez le
AsyncImageView
fourni ici . Un bon exemple de code, et pourrait même être utilisable dès la sortie de la boîte pour vous.la source
AFNetworking fournit le chargement d'image asynchrone dans une UIImageView avec prise en charge des espaces réservés. Il prend également en charge la mise en réseau asynchrone pour travailler avec les API en général.
la source
Assurez-vous d'activer ces paramètres à partir d'iOS 9:
Paramètres de sécurité du transport d'application dans Info.plist pour assurer le chargement de l'image à partir de l'URL afin qu'elle autorise le téléchargement de l'image et la définisse.
Et écrivez ce code:
la source
La façon d'utiliser une extension Swift pour
UIImageView
(code source ici ):Création d'une propriété calculée pour Associated
UIActivityIndicatorView
Initialiseur et poseur personnalisés
la source
Le moyen le meilleur et le plus simple de charger une image via une URL consiste à utiliser ce code:
Remplacez
imgUrl
par votreImageURL
Remplacez
imgView
par votreUIImageView
.Il chargera l'image dans un autre fil, donc il ne ralentira pas le chargement de votre application.
la source