Welcome to the Three20 forums! Before you dive too deep into things, please read our forum rules.
TTThumbsViewController display images while scrolling
  • Vote Up0Vote Down NabiaTesterNabiaTester December 2011
    Posts: 1

    Hi,

    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 tryed 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 http://stackoverflow.com/questions/4090730/nsurlrequest-wont-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];
    }
    
  • 1 Comment sorted by
  • Vote Up0Vote Down RobertBiehlRobertBiehl February 2012
    Posts: 2

    I think this should be integrated into the library! While suspending image loading while scrolling might be good performance wise, being able to scroll far and fast without seeing anything does not help very much - especially for TTThumbsViewController.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook Sign In with Twitter

Sign In Apply for Membership

In this Discussion

Latest Three20 version: 1.0.5

Who's Online (0)