TTThumbsViewController отображает изображения при прокрутке - PullRequest
2 голосов
/ 02 декабря 2011

Я расширяю TTThumbsViewController для отображения фотографий из внешнего источника. Все работает нормально, но я хотел бы изменить одно поведение контроллера: я хотел бы отображать / загружать изображения в TTThumbsViewController, пока пользователь все еще выполняет прокрутку, а не только когда пользователь заканчивает прокрутку.

Я видел, что в TTTableViewDelegate.m запросы приостанавливаются, когда начинается прокрутка, и я попытался установить его как НЕТ, но кажется, что он только загружает изображения и фактически не отображает их, когда они заканчивают загрузку.

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

Кроме того, я подключился к началу и концу перетаскивания вызовов делегатов, чтобы попытаться обновить представление каждую секунду или около того в надежде отобразить миниатюры, я попытался вызвать invalidateView, reload и еще пару на основной поток, но ни один из них не работал (invalidateModel здесь не подходит моим целям).

Может ли кто-нибудь указать мне правильное направление?

Заранее спасибо

Edit1 : в строке состояния есть загрузчик, если я прокручиваю, когда использую [TTURLRequestQueue mainQueue].suspended = NO;, но он фактически не извлекает изображения, подтвержденные wireshark.

Edit2 : после еще большей отладки я обнаружил, что запрос отправляется программно, но ответ принимается только после того, как мы завершим прокрутку, поэтому кажется, что асинхронные методы делегата NSURLConnection не запускаются, пока scrollView прокручивается, но мне удалось сделать подобный код (работающий) в другом контроллере представления с tableView без использования трех20 lib.

1 Ответ

0 голосов
/ 15 декабря 2011

После поиска в многочисленных темах и форумах я наконец достиг желаемого поведения, хотя я изменил код 320 вместо того, чтобы расширять его в одной части: в моем thumbsViewController я реализовал следующий делегат, позволяющий делать запросы во время прокрутки:

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

Теперь, чтобы решить проблему, связанную с тем, что соединения не обрабатываются при прокрутке, я обнаружил, что NSURLRequest не будет срабатывать, пока UIScrollView прокручивает полезно, а в TTRequestLoader.m я изменил следующее:

//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];
}
...