我有一个应用,我在UITableView
中加载图片。每行都有一个图像视图。
我从网址下载图片并将其分配给UIImageView
。这里的问题是,如果我拖动表视图,图像视图不会更新。它只会在我松开手指时更新。
另一个问题是我在所有单元格中都有一个标签,显示一个使用计时器递增的计数器。当我的手指在桌面视图上时,也不会调用计时器动作。
如何在这两种情况下进行更新?
可能这是一个非常基本的问题。但我不知道。
谢谢大家!
编辑: 我注意到视图中没有调用 -connection:didReceiveResponse: 方法正在被触动。
编辑2: 我尝试使用NSURLConnection添加运行循环。我的方法看起来像这样。
- (void)start {
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:self.imageURL cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:self.timeoutInterval];
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
_connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
NSPort* port = [NSPort port];
NSRunLoop* rl = [NSRunLoop currentRunLoop]; // Get the runloop
[rl addPort:port forMode:NSRunLoopCommonModes];
[_connection scheduleInRunLoop:rl forMode:NSRunLoopCommonModes];
[_connection start];
[rl run];
}
即使我在视线上触摸,也会加载图像。但表格视图滚动速度非常慢。它甚至不滚动。它只会在我拖动时移动。释放手指后没有动作。
答案 0 :(得分:2)
问题1
解决方案是使用在拖动表视图时不会被阻止的下载机制。 SDWebImage 是一个异步图像下载程序,具有UIImageView类别的缓存支持。即使您拖动表格,也可以更新图像视图。在我使用SDWebImage的项目中,我遇到了同样的问题。只需这样的电话即可。
[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
问题2
如果在主线程跟踪触摸时不会调用其scheduledTimer。做这样的事情。只需创建一个计时器并添加到循环
NSTimer* timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateLabel:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
这不会打断你的计时器。
答案 1 :(得分:0)
这可能会对您有所帮助,因为您下载图片以便在UItableViewCells
显示我在这里给您举例说明没有blocking UI
的背景中的任何内容,您可以获得良好的教程链接。他们有提到了同样的好方法。go through this link
其余的事情可以在他的答案中提到的Meera j Pai
的帮助下解决。
答案 2 :(得分:0)
我解决了 NSConnection &的问题。 NSTimer 使用 @Amar &提供的答案 @Meera J Pai ,使用 NSRunLoop 。
我已将连接代码更改为此类。
_connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]
[_connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
[_connection start];
效果很好!
谢谢大家。