关键词:
【中文标题】ActivityIndicator 不会停止动画,也不会从 UICollectionViewCell 中的超级视图中删除【英文标题】:ActivityIndicator doesn't stop animating nor removes from superview in UICollectionViewCell 【发布时间】:2012-10-12 23:04:39 【问题描述】:我正在尝试实现UICollectionView
并显示图像。我正在使用SDWebimage
,它在tableviewcells 中完美运行,但是当我尝试在UICollectionviewCell
中使用它时,它不会停止并删除activityindicator。如果没有下载的图像,它会放置占位符图像。我不确定可能导致此问题的 tableviewcell 和 collectionviewcell 之间有什么区别。
代码如下:
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"personImageCell";
PersonCollectionViewCell *cell = (PersonCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
Person *person = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSString *imgURL=[person.imageurl stringByAppendingString:@"?maxheight=300&maxwidth=400"];
UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.hidesWhenStopped = YES;
activityIndicator.hidden = NO;
[activityIndicator startAnimating];
activityIndicator.center = CGPointMake(cell.ivPersonImage.frame.size.width /2, cell.ivPersonImage.frame.size.height/2);
[cell.ivPersonImage setImageWithURL:[NSURL URLWithString:imgURL] placeholderImage:nil options:SDWebImageProgressiveDownload success:^(UIImage *image, BOOL cached)
[activityIndicator stopAnimating];[activityIndicator removeFromSuperview];
NSLog(@"activity indicator should be removed");
failure:^(NSError *error)
[activityIndicator stopAnimating];[activityIndicator removeFromSuperview];
cell.ivPersonImage.image = [UIImage imageNamed:@"placeholder.png"];
];
[cell.ivPersonImage addSubview:activityIndicator];
return cell;
更新:
当我做NSLog(@"activity indicator should be removed %@,activityIndicator);
我得到这个输出:
activity indicator should be removed <UIActivityIndicatorView: 0xa520ab0; frame = (65 90; 20 20); hidden = YES; layer = <CALayer: 0xa520b60>>
它显示UIActivityindicator
已隐藏,但仍显示在图像顶部
【问题讨论】:
我想知道为什么投反对票?谢谢! 所以你没有看到下载的图像?或者图像未下载,这就是未删除活动指示器的原因? 感谢您的回复!我看到图像并在某些单元格中获得活动指示器,而不是全部,在某些单元格中,活动指示器被冻结 在setImageWithURL...
中设置图像之前尝试将此行放在[cell.ivPersonImage addSubview:activityIndicator];
@Nekto 感谢您的回复,但没有奏效。奇怪的部分是当图像被缓存并放置在单元格中时,活动指示器确实停止并仅在下载图像时才被隐藏,然后指示器被隐藏。
【参考方案1】:
您似乎在重复使用单元格,所以UIActivityIndicatorView
s 不止一个。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"personImageCell";
PersonCollectionViewCell *cell = (PersonCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
Person *person = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSString *imgURL=[person.imageurl stringByAppendingString:@"?maxheight=300&maxwidth=400"];
UIActivityIndicatorView *activityIndicator = [cell.ivPersonImage viewWithTag:10];
if (activityIndicator) [activityIndicator removeFromSuperview];
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.hidesWhenStopped = YES;
activityIndicator.hidden = NO;
[activityIndicator startAnimating];
activityIndicator.center = cell.ivPersonImage.center;
activityIndicator.tag = 10;
[cell.ivPersonImage addSubview:activityIndicator];
[cell.ivPersonImage setImageWithURL:[NSURL URLWithString:imgURL] placeholderImage:nil options:SDWebImageProgressiveDownload success:^(UIImage *image, BOOL cached)
[activityIndicator stopAnimating];[activityIndicator removeFromSuperview];
NSLog(@"activity indicator should be removed");
failure:^(NSError *error)
[activityIndicator stopAnimating];[activityIndicator removeFromSuperview];
cell.ivPersonImage.image = [UIImage imageNamed:@"placeholder.png"];
];
return cell;
【讨论】:
你在钱上做对了!非常感谢你!我永远不会认为这是问题所在。我正在做 nslog,但在错误的地方。当我在返回单元格之前放置 nslog 时,它显示了一些带有两个活动指示器的单元格。我唯一要做的就是在我做 [cell.ivPersonImage viewWithTag:10] 时投射 UIActivityIndicatorView 奇怪的是,使用 tableview 它可以完美地工作。我猜collectionview有一点不同的机制。再次非常感谢!【参考方案2】:嗯....这很奇怪..您可以尝试确保 activityIndicator 在主线程上工作 -
[cell.ivPersonImage setImageWithURL:[NSURL URLWithString:imgURL] placeholderImage:nil options:SDWebImageProgressiveDownload success:^(UIImage *image, BOOL cached)
dispatch_async(dispatch_get_main_queue(), ^(void)
[activityIndicator stopAnimating];
[activityIndicator removeFromSuperview];
NSLog(@"activity indicator should be removed");
failure:^(NSError *error)
dispatch_async(dispatch_get_main_queue(), ^(void)
[activityIndicator stopAnimating];
[activityIndicator removeFromSuperview];
cell.ivPersonImage.image = [UIImage imageNamed:@"placeholder.png"];
];
我怀疑不是,这就是它没有停止动画的原因。
【讨论】:
感谢您的回复。我只是能够尝试它,但仍然是同样的问题。这是 uicollectionview 的实现中的东西,因为使用 uitableview 它可以完美地工作。 能不能也把activityIndicator和startAnimating的声明通过dispatch_async放到主线程中。我有一个类似的问题,activityIndicator 不会消失。我通过确保所有 UIKit 在主线程中处理来解决它。【参考方案3】:在当前 View Controller 的 ViewDidLoad 中创建活动指示器
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(150, 225, 20, 30)];
[spinner setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
spinner.color = [UIColor blueColor];
[self.view addSubview:spinner];
在导致活动的函数开头使用下面的代码
[NSThread detachNewThreadSelector:@selector(threadStartAnimating:) toTarget:selfwithObject:nil];
声明启动和停止动画的这两种方法
-(void)threadStartAnimating:(id)data
[spinner startAnimating];
-(void)threadStopAnimating:(id)data
[spinner stopAnimating];
请提供反馈,因为此代码在我自己的项目中运行良好
【讨论】:
带有 Shell 顶部导航的 ActivityIndicator
】带有Shell顶部导航的ActivityIndicator【英文标题】:ActivityIndicatorwithShelltopnavigation【发布时间】:2022-01-1418:44:36【问题描述】:我有一个带有一些ShellContent的shell导航,并且员工菜单需要很长时间才能加载数据。已经搜索添加... 查看详情
Xamarin Forms 两种方式绑定ActivityIndicator
】XamarinForms两种方式绑定ActivityIndicator【英文标题】:XamarinFormstwowaybindingActivityIndicator【发布时间】:2017-08-2808:50:44【问题描述】:我是Xamarin的新手,我正在使用ActivityIndicator告诉用户该应用正在下载数据。问题是我正... 查看详情
swiftuiview的+activityindicator.swift(代码片段)
我如何显示带有背景的 ActivityIndicator 弹出窗口
】我如何显示带有背景的ActivityIndicator弹出窗口【英文标题】:HowcanishowActivityIndicatorpopupwithbackdrop【发布时间】:2018-07-2800:45:54【问题描述】:ApiHandler和hitapi是我的方法我想在调用hitapi方法时显示加载所以请建议我如何为带... 查看详情
React Native - 将 ActivityIndicator 重新定位到登录按钮
】ReactNative-将ActivityIndicator重新定位到登录按钮【英文标题】:ReactNative-RelocatingActivityIndicatortoLoginButton【发布时间】:2021-09-0414:41:41【问题描述】:我尝试将ActivityIndicator添加到登录按钮的位置。我想如果用户按下登录... 查看详情
动画完成后 React-Native ActivityIndicator 不隐藏
】动画完成后React-NativeActivityIndicator不隐藏【英文标题】:React-NativeActivityIndicatordoesn\'thideafteranimationfinish【发布时间】:2017-06-1003:22:17【问题描述】:我有一个ActivityIndicator,它在fetch加载时显示,当componentDidMount被触发... 查看详情
swiftrxswift:基于activityindicator过滤可观察序列的元素。(代码片段)
重新加载 UICollectionView 时 UIActivityIndicator 不会停止
】重新加载UICollectionView时UIActivityIndicator不会停止【英文标题】:UIActivityIndicatornotstoppingwhenUICollectionViewisreloaded【发布时间】:2016-05-2804:00:26【问题描述】:需要的结果:我遇到了一个关于UIActivityIndicator和UICollectionView... 查看详情
ActivityIndicator(微调器)出现错误在展开可选值时意外发现 nil
】ActivityIndicator(微调器)出现错误在展开可选值时意外发现nil【英文标题】:ActivityIndicator(spinner)gettingerrorUnexpectedlyfoundnilwhileunwrappinganOptionalvalue【发布时间】:2019-03-3005:19:36【问题描述】:在我的共享课程中,我编写了微... 查看详情
来自应用委托的停止动画活动指示器
...用委托的停止动画活动指示器【英文标题】:stopAnimatingactivityindicatorfromappdelegate【发布时间】:2017-09-1711:37:35【问题描述】:我无法从我的应用委托中的某个函数停止活动指示器,我知道该函数正在被调用,但我的日志中没有收... 查看详情
如何在 UITableView 的 searchBar 上方显示 UIActivityIndicator
】如何在UITableView的searchBar上方显示UIActivityIndicator【英文标题】:HowdoIshowaUIActivityIndicatorabovethesearchBarinUITableView【发布时间】:2013-10-0113:08:34【问题描述】:我正在尝试找出将searchBar和activityIndicator添加到UITableView顶部... 查看详情
UISearchBar在Swift中完成后如何停止UIActivityIndicator
】UISearchBar在Swift中完成后如何停止UIActivityIndicator【英文标题】:HowtostopUIActivityIndicatorafterUISearchBarhasfinishedinSwift【发布时间】:2016-02-0722:12:37【问题描述】:所以我的设置:我有一个使用Parse设置的应用程序,我使用的是PFQ... 查看详情
UICollectionView 单元格中的 UIActivityIndicator 随机不会隐藏
】UICollectionView单元格中的UIActivityIndicator随机不会隐藏【英文标题】:UIActivityIndicatorinaUICollectionViewcellrandomlywon\'thide【发布时间】:2013-10-2700:55:15【问题描述】:我有一个UICollectionView,其中UIActivityIndicator在加载图像之... 查看详情
斯威夫特 3 |以编程方式添加约束不会使我的子视图居中
...试编写一个UIImageView扩展,它在我的ImageView中间显示一个ActivityIndicator,我尝试了以下操作,请注意我的ImageViews对高度(100) 查看详情
d3 地理动画不会停止
】d3地理动画不会停止【英文标题】:d3geoanimationdoesnotstop【发布时间】:2018-05-0223:06:38【问题描述】:我几乎是个菜鸟,试图了解一些在d3.js中看起来很有趣但又有点超出我掌握的东西。当然,我在bl.ocks.org上弄乱了一些代码,... 查看详情
UIViewController 拥有另一个 UIViewController
...示器视图。这可以实现为..LoginViewController可以拥有View为activityIndicator的LoadingViewContr 查看详情
停止梯度在联合损失中流动
】停止梯度在联合损失中流动【英文标题】:stopgradientsflowinginajointloss【发布时间】:2020-05-0508:46:23【问题描述】:我有一个输入张量data=tf.placeholder(tf.int32,[None])将被嵌入embedding_matrix=tf.get_variable("embedding_matrix",[5,3],tf.float32,initial... 查看详情
在 Swift 2.0 的 UITableView 中动态移动活动指示器
...ift2.0的UITableView中动态移动活动指示器【英文标题】:MoveactivityindicatordynamicallyinUITableViewinSwift2.0【发布时间】:2015-10-0107:34:14【问题描述】:我知道将activityIndicator添加到视图中的某个位置,在需要时启动和停止动画。但是... 查看详情