gpt4 book ai didi

ios - UICollectionView 单元格中的 UIActivityIndi​​cator 随机不会隐藏

转载 作者:可可西里 更新时间:2023-11-01 05:44:49 35 4
gpt4 key购买 nike

我有一个 UICollectionView,其中 UIActivityIndi​​cator 在加载图像之前显示在单元格中,然后无论 UIImageView+AFNetworking block 中的成功或失败都会被取消。然而,有时我会得到似乎没有隐藏或停止动画的剩余事件指示器。

这是我的 cellForItemAtIndexPath 的一部分:

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
...
NSURL *imageURL = [NSURL URLWithString:[tmpcamera objectForKey:@"url"]];
NSURLRequest *imageRequest = [NSURLRequest requestWithURL:imageURL cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10];

UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.hidesWhenStopped = YES;
activityIndicator.hidden = NO;
activityIndicator.frame = CGRectMake(0, 0, 130, 110);
activityIndicator.tag = 10;

[cell.imageView addSubview:activityIndicator];
[activityIndicator startAnimating];

__weak typeof(FavouriteCell) *weakImage = cell;
[cell.imageView setImageWithURLRequest:imageRequest
placeholderImage:[UIImage imageNamed:@"trans50.png"]
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *i)
{
[activityIndicator stopAnimating];
activityIndicator.hidden = YES;
[activityIndicator removeFromSuperview];
[weakImage.imageView setImage:i];

}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
{
[activityIndicator stopAnimating];
activityIndicator.hidden = YES;
[activityIndicator removeFromSuperview];
[weakImage.imageView setImage:[UIImage imageNamed:@"errorimage.png"]];
}];
...
}

我不确定这段代码是否足以调试问题所在,但我们将不胜感激。

这里是我正在谈论的示例屏幕截图:

sample

最佳答案

由于在图像请求有机会成功或失败(例如通过滚动)之前,您的单元格可能会被回收/重复使用,因此您最终可能会在单元格中出现“孤立的”事件指示器。

事件顺序:

  1. 单元加载,尝试加​​载图像并启动事件指示器
  2. 用户在图片加载前滚动。电池被回收。
  3. 细胞被重复使用。添加了一个新的事件指示器,并且中止了之前的图像加载(因此从不调用之前的成功/失败 block )。新旧事件指示器现在都在单元格上,旧的仍在运行。

一些避免这个问题的建议:

  1. 创建一个包含事件指示器的自定义单元格。
  2. 在创建事件指示器时,为指示器的标记属性分配一个数字,然后通过 viewWithTag 查找是否已经存在事件指示器:在重用单元格时。如果已经存在,则使用现有的,否则,创建一个新的。

关于ios - UICollectionView 单元格中的 UIActivityIndi​​cator 随机不会隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19613544/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com