触摸时更新视图

时间:2013-05-21 04:59:56

标签: iphone ios objective-c ipad tableview

我有一个应用,我在UITableView中加载图片。每行都有一个图像视图。

  1. 我从网址下载图片并将其分配给UIImageView。这里的问题是,如果我拖动表视图,图像视图不会更新。它只会在我松开手指时更新。

  2. 另一个问题是我在所有单元格中都有一个标签,显示一个使用计时器递增的计数器。当我的手指在桌面视图上时,也不会调用计时器动作。

  3. 如何在这两种情况下进行更新?

    可能这是一个非常基本的问题。但我不知道。

    谢谢大家!

    编辑: 我注意到视图中没有调用 -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];
    }
    

    即使我在视线上触摸,也会加载图像。但表格视图滚动速度非常慢。它甚至不滚动。它只会在我拖动时移动。释放手指后没有动作。

3 个答案:

答案 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];

效果很好!

谢谢大家。