2

在用户按下我的收藏单元格中的按钮后,我正在为 ActivityIndi​​cator 设置动画,同时等待网络响应。下面的代码由自定义单元格的每个实例调用(在调试器中确认),但活动指示器仅在单击第一个单元格中的按钮时显示,或者在重复使用第一个单元格的单元格中单击时显示。如果我在第一个单元格之前单击另一个单元格中的按钮并不重要。

customCollectionViewCell.m
@interface customCollectionViewCell(){
    UIActivityIndicatorView *activityIndicator;
}

@implementation cutomCollectionViewCell
 - (void) choiceClicked:(id)sender{

   dispatch_async(dispatch_get_main_queue(), ^{
        activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
        actvityIndicator.center = self.center;
        [self.contentView addSubview:activityIndicator];
        [actvityIndicator startAnimating];
    });
    async - network stuff
}

我确保在准备重用时从超级视图中删除指标并将其设置为 nil。

我还尝试仅在指示器不存在时创建指示器并开始动画 - 行为仍然没有变化。
编辑:如果只是从主线程调用动画并且其他调用是默认队列的明确一部分,也没有关系。

if (activityIndicator == nil){
    activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    activityIndicator.center = self.center;
    [self.contentView addSubview:activityIndicator];
}
dispatch_async(dispatch_get_main_queue(), ^{
    [activityIndicator startAnimating];
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    network call
        });
4

1 回答 1

8

自定义单元格内的 Self.center 返回一个 CGPoint,其 Y 值 = 滚动视图中的位置,而不是单元格高度的中心,这将活动视图放置在单元格的可见框架之外。

这使得活动指示器在所有单元格中工作: activityIndicator.center = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);

于 2013-10-27T15:29:51.293 回答