在UITableViewCell中加载图像时,用UIActivityIndi​​catorView替换UIImageView

时间:2013-07-05 15:22:51

标签: ios

我有一个UITableViewCell,在xib文件中定义了2 UIImageView。 现在我想出了美化ui的想法,我想用UIActivityIndicatorView更改UIImageView的运行时,直到异步响应没有回来。

不幸的是UIActivityIndicatorView根本看不到它,只是完成后的完整图像。

以下是相关代码部分:

-(UITableViewCell *)tableView:(UITableView *)tableView
        cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell =
         [tableView dequeueReusableCellWithIdentifier:myTableCellId];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

...

    UIImageView *imageView = (UIImageView *)[cell viewWithTag:200];

...

    imageView.image=nil; // reset image as it will be retrieved asychronously

    UIActivityIndicatorView *loadingActivity = [[UIActivityIndicatorView alloc] 
        initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    [loadingActivity startAnimating];

    loadingActivity.frame = imageView.frame;
    UIView* parent = [imageView superview];
    [parent addSubview:loadingActivity];
    [parent bringSubviewToFront:loadingActivity];    

    [myObject callMyFunction:index completionBlock:^(UIImage *img) {
        dispatch_async(dispatch_get_main_queue(), ^{
            imageView.image=img;
            [loadingActivity stopAnimating];
            [loadingActivity removeFromSuperview];
            //DLog(@"Got image for: %@", titleLabel.text);
        });
    }];

    return cell;
}

任何想法有什么不对?

2 个答案:

答案 0 :(得分:4)

如果白色背景上有白色微调器,则它看起来不可见。

答案 1 :(得分:1)

设置框架,然后调用开始动画。同时尝试更改已分配给它的帧。

loadingActivity.frame = CGRectMake(20, 20, 40, 20)

您也可以设置属性loadingActivity.hidesWhenStopped = YES;,而不是执行removeFromSuperview。