【发布时间】:2013-10-26 23:46:14
【问题描述】:
在用户按下我的收藏单元格中的按钮后,我正在为 ActivityIndicator 设置动画,同时等待网络响应。下面的代码由自定义单元格的每个实例调用(在调试器中确认),但活动指示器仅在单击第一个单元格中的按钮时显示,或者在重复使用第一个单元格的单元格中单击时显示。如果我在第一个单元格之前单击另一个单元格中的按钮并不重要。
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
});
【问题讨论】:
-
您的网络调用是否仍然被调用,或者它是否立即返回或其他单元格?你什么时候停止活动指示器的动画?为什么不一直显示指标并使用
hidesWhenStopped? -
另外,在调试器中,注销一些框架和子视图等等。如果代码正在执行,则该指标将在某处。
-
退出框架和子视图表明 self.center 返回一个 CGPoint,其 Y 值 = 滚动视图中的位置,而不是单元格高度/宽度的中心。这使得活动指示器在所有单元格中工作:
activityIndicator.center = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
标签: ios uicollectionview uiactivityindicatorview uicollectionviewcell