para descargar iphone uiimage uiimagepickercontroller

descargar twitter para iphone



¿Puedo cargar un UIImage desde una URL? (10)

Asegúrese de habilitar esta configuración desde iOS 9:

Configuración de seguridad de transporte de aplicaciones en Info.plist para garantizar la carga de imágenes desde la URL para que permita descargar la imagen y establecerla.

Y escribe este código:

NSURL *url = [[NSURL alloc]initWithString:@"https://www.google.co.in/"]; NSData *data =[NSData dataWithContentsOfURL:url]; quickViewImage.image = [UIImage imageWithData:data];

Tengo una URL para una imagen (la obtuve de UIImagePickerController) pero ya no tengo la imagen en la memoria (la URL se guardó de una ejecución anterior de la aplicación). ¿Puedo volver a cargar el UIImage desde la URL nuevamente?

Veo que UIImage tiene una imageWithContentsOfFile: pero tengo una URL. ¿Puedo usar NSData''s dataWithContentsOfURL: para leer la URL?

EDIT1

basado en la respuesta de @ Daniel probé el siguiente código pero no 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]; }

Cuando lo ejecuté, la consola muestra:

-[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''

Al mirar la pila de llamadas, llamo a URLWithString, que llama a URLWithString: relativeToURL :, luego initWithString: relativeToURL :, luego _CFStringIsLegalURLString, luego CFStringGetLength, luego forwarding_prep_0 , luego reenviando , luego - [NSObject doesNotRecognizeSelector].

¿Alguna idea de por qué mi NSString (la dirección de photoURL es 0x536fbe0) no responde a la longitud? ¿Por qué dice que no responde - [longitud de NSURL]? ¿No sabe que param es un NSString, no un NSURL?

EDIT2

De acuerdo, el único problema con el código es la cadena para la conversión de URL. Si codigo la cadena, todo lo demás funciona bien. Entonces algo está mal con mi NSString y si no puedo resolverlo, creo que debería aparecer como una pregunta diferente. Con esta línea insertada (pegué la ruta desde el registro de la consola anterior), funciona bien:

photoURL = @"file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG";


La forma de usar una Extension Swift para UIImageView (código fuente here ):

Crear propiedad UIActivityIndicatorView para UIActivityIndicatorView asociado

import Foundation import UIKit import ObjectiveC private var activityIndicatorAssociationKey: UInt8 = 0 extension UIImageView { //Associated Object as Computed Property var activityIndicator: UIActivityIndicatorView! { get { return objc_getAssociatedObject(self, &activityIndicatorAssociationKey) as? UIActivityIndicatorView } set(newValue) { objc_setAssociatedObject(self, &activityIndicatorAssociationKey, newValue, UInt(OBJC_ASSOCIATION_RETAIN)) } } private func ensureActivityIndicatorIsAnimating() { if (self.activityIndicator == nil) { self.activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray) self.activityIndicator.hidesWhenStopped = true let size = self.frame.size; self.activityIndicator.center = CGPoint(x: size.width/2, y: size.height/2); NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in self.addSubview(self.activityIndicator) self.activityIndicator.startAnimating() }) } }

Inicializador personalizado y Setter

convenience init(URL: NSURL, errorImage: UIImage? = nil) { self.init() self.setImageFromURL(URL) } func setImageFromURL(URL: NSURL, errorImage: UIImage? = nil) { self.ensureActivityIndicatorIsAnimating() let downloadTask = NSURLSession.sharedSession().dataTaskWithURL(URL) {(data, response, error) in if (error == nil) { NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in self.activityIndicator.stopAnimating() self.image = UIImage(data: data) }) } else { self.image = errorImage } } downloadTask.resume() } }


Mira el AsyncImageView provisto here . Un buen código de ejemplo, e incluso podría ser utilizable "listo para usar" para usted.


Obtén DLImageLoader e intenta seguir el código

[DLImageLoader loadImageFromURL:imageURL completed:^(NSError *error, NSData *imgData) { imageView.image = [UIImage imageWithData:imgData]; [imageView setContentMode:UIViewContentModeCenter]; }];

Otro ejemplo típico del mundo real de usar DLImageLoader, que puede ayudar a alguien ...

PFObject *aFacebookUser = [self.fbFriends objectAtIndex:thisRow]; NSString *facebookImageURL = [NSString stringWithFormat: @"http://graph.facebook.com/%@/picture?type=large", [aFacebookUser objectForKey:@"id"] ]; __weak UIImageView *loadMe = self.userSmallAvatarImage; // ~~note~~ you my, but usually DO NOT, want a weak ref [DLImageLoader loadImageFromURL:facebookImageURL completed:^(NSError *error, NSData *imgData) { if ( loadMe == nil ) return; if (error == nil) { UIImage *image = [UIImage imageWithData:imgData]; image = [image ourImageScaler]; loadMe.image = image; } else { // an error when loading the image from the net } }];

Como menciono anteriormente, otra gran biblioteca para considerar en estos días es Haneke (desafortunadamente no es tan liviana).


Pruebe este código, puede configurar la imagen de carga con él, para que los usuarios sepan que su aplicación está cargando una imagen desde la url:

UIImageView *yourImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"loading.png"]]; [yourImageView setContentMode:UIViewContentModeScaleAspectFit]; //Request image data from the URL: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://yourdomain.com/yourimg.png"]]; dispatch_async(dispatch_get_main_queue(), ^{ if (imgData) { //Load the data into an UIImage: UIImage *image = [UIImage imageWithData:imgData]; //Check if your image loaded successfully: if (image) { yourImageView.image = image; } else { //Failed to load the data into an UIImage: yourImageView.image = [UIImage imageNamed:@"no-data-image.png"]; } } else { //Failed to get the image data: yourImageView.image = [UIImage imageNamed:@"no-data-image.png"]; } }); });


Puedes hacerlo de esta forma (sincrónicamente, pero compacta):

UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:MyURL]]];

Un enfoque mucho mejor es utilizar LazyTableImages de Apple para preservar la interactividad.


Puedes probar SDWebImage , proporciona:

  1. Carga asincrónica
  2. Almacenamiento en caché para uso fuera de línea
  3. Coloque la imagen del titular para que aparezca mientras se carga
  4. Funciona bien con UITableView

Ejemplo rápido:

[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];


Si realmente está absolutamente seguro de que NSURL es una url de archivo, es decir, se garantiza que [url isFileURL] es verdadero en su caso, entonces simplemente puede usar:

[UIImage imageWithContentsOfFile:url.path]


Y la versión rápida:

let url = NSURL.URLWithString("http://live-wallpaper.net/iphone/img/app/i/p/iphone-4s-wallpapers-mobile-backgrounds-dark_2466f886de3472ef1fa968033f1da3e1_raw_1087fae1932cec8837695934b7eb1250_raw.jpg"); var err: NSError? var imageData :NSData = NSData.dataWithContentsOfURL(url,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err) var bgImage = UIImage(data:imageData)


AFNetworking proporciona carga de imágenes asíncronas en un UIImageView con soporte de marcador de posición. También admite redes asíncronas para trabajar con API en general.