Nate
Nate

Reputation: 7856

Progressive download of images in a UITableView

I'm developing on the iPhone and I have seen in the AppStore that the images are progressively downloaded in the UITableView... How can I implement that? My idea was to detect the showed content (which cells are shown) and download these images. My problem is that I don't know how to detect the showed cells! Is it the good way to do it?

Best

Upvotes: 1

Views: 2999

Answers (6)

Rohit Wankhede
Rohit Wankhede

Reputation: 506

Please go through this link , and try to integrate Lazy table view load , you can achieve you output , http://www.cocoaintheshell.com/2011/05/progressive-images-download-imageio/ change the url in ProgressiveImageDownloadViewController in Download button click method.

Upvotes: 0

rajesh
rajesh

Reputation: 582

That is calles LazyTableView...You can gt tutorial from here

http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html

Upvotes: 0

progrmr
progrmr

Reputation: 77193

I would implement each cell as a subclass of UITableViewCell and then override willMoveToWindow: method in the subclass. willMoveToWindow: is called when the cell view becomes visible on the screen or when it goes off screen (newWindow gets nil). Then each cell can queue a request to load its image as it becomes visible (and maybe even cancel its queued request if it goes off screen).

BTW, You can use the visibleCells property of UITableView to get the list of cells that are visible.

Upvotes: 1

corprew
corprew

Reputation: 2001

Here's an example of how to do this that implements the basic idea that Jasarien talks about. It may be sufficient depending on your application's needs and is generally good example of how to do it if it isn't.

Upvotes: 1

choise
choise

Reputation: 25244

@Jasarien: nice answer

Or you can use the three20 project if you want. there is a TTTableViewController that already handles all the stuff you want. you only have to input the URL to the imageview and viola.

TT also caches your images in memory or also on disk.

check out the sample project bundled in three20 gitbub ressource. there an example.

Upvotes: 0

Jasarien
Jasarien

Reputation: 58448

The way this was demonstrated at the iPhone Developer Tech Talk was to use NSOperation and NSOperationQueue.

The idea is to wrap up your image download request (using NSURLRequest) into an NSOperation.

You can set your cell as the receiver of a call back sent by your operation when it's complete so that you can attach the image to the cell (draw it manually, or add it to an image view).

Then basically, in your cellForRowAtIndexPath method, tell the cell to start the image download, and have the cell create an NSOperation and add it to the operation queue managed by your table view controller or something.

The queue will start executing the operations and call back to each cell when they're done.

If you want to, you can cancel the operation if the cell moves offscreen, so you don't waste resources downloading an image that will be thrown away because the cell won't be visible to display the image.

Upvotes: 3

Related Questions