iphoneimagescrollrefreshttthumbsviewcontroller

TTThumbsViewController display images while scrolling


I'm extending TTThumbsViewController to display photos from external source. Everything works fine but I'd like to change one behaviour of the controller: I'd like to display/load images in TTThumbsViewController while the user is still scrolling and not only when the user finishes scrolling.

I saw that in TTTableViewDelegate.m the requests are being suspended when scrolling starts and I've tried setting it no NO but it only seems to fetch the images and not actually displaying them when they finish loading.

//TTTableViewDelegate.m
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
  [TTURLRequestQueue mainQueue].suspended = YES;
  ...
}

In addition I hooked to the begin and end dragging delegate calls to try and refresh the view every second or so with hopes of displaying the thumbnails, I've tried calling invalidateView, reload and a couple more on the main thread but none seemed to work (invalidateModel doesn't suit my purposes here).

Could anyone point me in the right direction?

Thanks in advance

Edit1: there is a loader in status bar if I scroll when I use [TTURLRequestQueue mainQueue].suspended = NO; but it doesn't actually fetch the images, confirmed with wireshark.

Edit2: after a bit more debugging I found that the request is sent programatically but the response is only received after we finish scrolling, so it seems the asynchronous delegate methods of NSURLConnection are not firing while a scrollView is being scrolled, but I've managed to do similar code (working) in another view controller with a tableView without using three20 lib.


Solution

  • After googling around numerous threads and forums I finally achieved the behaviour I wanted, although I changed three20 code instead of extending it in one part: in my thumbsViewController I implemented the following delegate allowing requests to be made while scrolling:

    -(void)didBeginDragging {
        [super didBeginDragging];
        [TTURLRequestQueue mainQueue].suspended = NO;
    }
    

    Now to solve the problem of the connections not being processed while scrolling I found NSURLRequest won't fire while UIScrollView is scrolling useful and in TTRequestLoader.m I changed the following:

    //TTRequestLoader.m
    - (void)connectToURL:(NSURL*)URL {
        ...
        //To allow requests while scrolling we must schedule the conenction in other run loop
        //_connection = [[NSURLConnection alloc] initWithRequest:URLRequest delegate:self];
        //code above was replaced by the one below
        _connection = [[NSURLConnection alloc] initWithRequest:URLRequest delegate:self startImmediately:NO];
        [_connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
        [_connection start];
    }