用于避免UI滞后的后续Q(IOS)

时间:2012-02-25 16:39:49

标签: ios multithreading user-interface photo lag

现在我正在使用这段代码,稍作修改:

if (self._photoPath && !self._photo) {
    dispatch_queue_t bg_thread = dispatch_queue_create("com.yourcompany.bg_thread", NULL);
    dispatch_queue_t main_queue = dispatch_get_main_queue();
    dispatch_async(bg_thread,^{
        NSData *data = [NSData dataWithContentsOfFile:self._photoPath];
        if(data != nil) {
            dispatch_async(main_queue,^{ 
                self._photo = [UIImage imageWithData:data];
                [self.photoButton setImage:[UIImage imageNamed:@"photoButton.png"] forState:UIControlStateNormal];
            });
        }
    });

}

正如你所看到的,事实上,在我得到那张照片之后,我想立即将它设置为我的“photoButton”,

但现在,UI变得平滑,但我的photoButton外观总是黑色......

接下来我该怎么做?

感谢您的耐心等待。

__ _ __ _ __ _ __ _ ___ 更新 _ __ _ __ _ _ < /强>

我有2个viewControllers,A和B.

A是根viewController,B是A的子viewController。

在B中,有一个用于调用相机拍照的按钮。

用户拍照后,照片的外观就变成了那张照片。

当我从A推出新的B(没有照片)时,

事情进展顺利。

但是当有一张旧B带有照片时。

动画有点卡住了,因为我想以下代码:

- (void)viewWillAppear:(BOOL) animated {
if (self._photoPath && !self._photo) {
        NSData *data = [NSData dataWithContentsOfFile:self._photoPath];
        if(data != nil)
            self._photo = [UIImage imageWithData:data];
}
[super viewWillApear];

}

但是我需要在显示视图之前获取该照片,因为我需要将该照片设置为我的photoButton的背景。

那么,有没有办法避免卡住视图的动画?因为它确实导致糟糕的用户体验。

非常感谢!

1 个答案:

答案 0 :(得分:0)

我找到了答案。

只需添加一行代码即可刷新按钮。

对我来说,它是

[self.photoButton setImage:[UIImage imageNamed:@"photoButton.png"] forState:UIControlStateNormal];
NSUInteger p[2] = {1,4};
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:
                              [NSIndexPath indexPathWithIndexes:p length:2]] 
                      withRowAnimation:UITableViewRowAnimationNone];