I have successfully parsed XML data into my iOS application so now it displays all the most recent blog posts, however I need help on how to access the thumbnail images from the xml files. You can use this link to better see where the image is stored
http://www.autoblog.com/rss.xml
I'm guessing you need to request the data for the url then create an image with the data, but just need an example to help me out.
I greatly appreciate any sort of help that you can offer me.
The basic is simple.
NSString *imageURL = #"http://~~~~";
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]];
UIImage *image = [UIImage imageWithData:data];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
But you have to concern many things related with network. Why don't you use AFNetworking? It's very useful framework. There's a category to handle this kind of thing.
To show the thumbnails, I would use an UICollectionView and a custom cell with an embedded UIImageView.
Implement the UICollectionViewDataSource protocol and do the network stuff in cellForItemAtIndexPath method. This way, it only gets the thumbnail when needed.
AFNetworking also simplifies a lot.
Here is an example using tableviews and Flickr APIs http://iosdevelopertips.com/networking/iphone-json-flickr-tutorial-part-1.html
Related
I am getting URL images from API. I have stored the UR images into string. Here my problem I want to display that into carousel. I don't know how to do this. Below is my code that I have tried.
for(int i=0;i<hotelIMAges.count;i++ )
{
NSDictionary *images=[hotelIMAges objectAtIndex:i];
NSString *Images= [images objectForKey:#"Imagepath"];
[ImageARRAy addObject:Images];
} //Here I have stored all the images into string..(https://***.jpg)
Carousel *carousel = [[Carousel alloc] initWithFrame:CGRectMake(0, 0,300, 262)];
[carousel setImages:ImagesARRAy];
You just need to process asynchronously as your current approach can be a synchronous request and blocks the main thread until that download is complete.
Consider using SDWebImage and the UIImageView extension it adds to manage the image download and display. It also supports a placeholder image that you can supply to indicate that the download is in progress.
If your using any third party carousel check for asynchronous methods to display the images.I believe setImages: method must be for images that are stored locally inside app. Do let me know if you have any queries.
----EDITED----
Your Carousel is using synchronous method to display which blocks the main thread.
You can use SDWebImage for your purpose.
For this you need to download SDWebImage for asynchronous downloading of image. You can download SDWebImage from link below.
You can use it in your Carousel.h class as
#import <SDWebImage/UIImageView+WebCache.h>
modify your setup method with below line.
[imageView sd_setImageWithURL:[NSURL URLWithString:self.images[i]]
placeholderImage:[UIImage imageNamed:#"placeholder.png"]];
For details refer github page of SDwebpage. DO let me know if you have any queries.
https://github.com/rs/SDWebImage#using-asynchronous-image-downloader-independently
Iam using collectionview to load image.These images are loaded from url in background thread. Hence the scrolling is not smooth.The images in url get expired after seconds hence i want to update the image with new image.How can i use the SDWebImage to load image and make scrolling smooth? Can anyone please help me to solve this.
Use this code
[YOUR_CELL_NAME.YOUR_IMAGE_NAME setImageWithURL:[NSURL URLWithString:#"IMAGE URL"] placeholderImage:[UIImage imageNamed:#"PLACEHOLDER IMAGE NAME"]];
You need to integrate the sdwebimage classes in your code. After that make a import.
Download sdwebimage from here
#import "UIImageView+WebCache.h"
and in your collectionview method write following lines to download image in backend thread.
[YOUR_CELL_NAME.YOUR_IMAGE_NAME setImageWithURL:[NSURL URLWithString:#"IMAGE URL"] placeholderImage:[UIImage imageNamed:#"PLACEHOLDER IMAGE NAME"]];
I am loading images in my UITableViewCell from some web url and those images are in size around 80-100 kb per image. Everything works fine when i download images asynchronously but when i scroll the tableview, images start again downloading. Can i get rid of this as i have only limited no of rows.
I want if images from url download once should not be download again as it does makes view not comfortable for users when images starts downloading again.
I am using below code to load images in CellforRowAtIndexPath:
dispatch_async(dispatch_get_global_queue(0,0), ^{
NSData * data = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:url];
if ( data == nil )
return;
dispatch_async(dispatch_get_main_queue(), ^{
cell.eventImage.image= [UIImage imageWithData:data];
});
});
You should use SDWebImage which will cache image on your device and if same image came from server then it load from your local device.
Add SDWebImage to your project.
import <SDWebImage/UIImageView+WebCache.h> header
then add below code at cellForItemAtIndexPath:
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:#"your image URL"]
placeholderImage:[UIImage imageNamed:#"placeholder.png"]];
Better make use of SDWebImageCache for this because this a advantageous third party library to store the image in cache. After downloading once the images will be taken automatically from the cache.
SDWebImageCache
When you Download image put it to the document directory and before you download image check if document directory contains image then load it from there otherwise download from URL
If you want you can make it yourself. You can use NSCache in order to save your images. NSCache it is like NSMutableDictionary (save your image by key). And then you can check it. For key you can use path to your image.
But I also recommend you to use SDWebImage.
I am working on iOS application using new version Xcode 7 and iOS 9. I am facing the following issue.
UIImageView is not showing images coming through URL. I am using the following code but imageview did not show images.
NSURL *url = [NSURL URLWithString:#"http://XXX.XX.XX.XXX:XXXX/XXXXXXXX/7339bec316b7404299c582f5904a6d3f.jpeg"];
NSData *data = [[NSData alloc]initWithContentsOfURL:url];
UIImage *img = [[UIImage alloc]initWithData:data ];
imageview.image=img;
I don't know what is the issue in Xcode 7, but it is working previous version.
Thanks in advance,
The above code should work for synchronous loading of image into ImageView. Make sure URL and imageView code is right. Alternatively you can use SDWebImage for loading of images into imageView. It has Asynchronous loading, caching and many more options like post response processing which are very useful. It's very simple to implement too. Sample code is below.
#import <SDWebImage/UIImageView+WebCache.h>
[_profilePic sd_setImageWithURL:[NSURL URLWithString:imageUrl]
placeholderImage:[UIImage imageNamed:#"placeholderIcon"]];
This will populate your imageView with a placeholder and when the image is fetched it replaces placeholder with it. Check out the github project for more options.
I use SDWebImage in my app. I have several UIImageView in my viewcontroller, and
all of them use setImageWithURL: method(in UIImageView+WebCache.m)
load image by URL. There are three images should be load, two images
about 520kb, and the little one is 180kb. While I do run it , it will
receive memory warning and crash, I have no idea about it. Can anyone
help me, thanks!
Here is my code:
NSDictionary *data = [respDic objectForKey:#"data"];
[self.topLeft setImageWithURL:[NSURL URLWithString:[data valueForKey:#"tr_cu_1"]]];
[self.bottomLeft setImageWithURL:[NSURL URLWithString:[data valueForKey:#"tr_cu_2"]]];
[self.bottomRight setImageWithURL:[NSURL URLWithString:[data valueForKey:#"tr_cu_3"]]];