我正在扩展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的视图控制器中执行类似的代码(工作)而不使用three20 lib。
答案 0 :(得分:0)
在搜索了大量的线程和论坛后,我终于实现了我想要的行为,虽然我更改了三个代码而不是将其扩展为一部分:在我的thumbsViewController
我实现了以下委托,允许在滚动时发出请求:
-(void)didBeginDragging {
[super didBeginDragging];
[TTURLRequestQueue mainQueue].suspended = NO;
}
现在要解决滚动时未处理连接的问题,我发现NSURLRequest won't fire while UIScrollView is scrolling很有用,而且在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];
}