【问题标题】:Animation inside UICollectionViewCell doesn't run when "awakeFromNib" runs.当“awakeFromNib”运行时,UICollectionViewCell 内的动画不会运行。
【发布时间】:2015-03-09 09:02:08
【问题描述】:

我正在开发一个带有 Cell 的 UICollectionViewController,其中包含在显示时动画的内部“UIView”(只是一个简单的 y 轴移动)。

我的问题是,首先从 nib 文件加载单元格,动画不运行,但单元格被“重用”,动画正在运行。

这就是我的工作:

- (void)loadCellWithAnimation{
    CGRect prevRect = self.viewThatAnimates.frame;
    prevRect.origin.y = prevRect.origin.y+10;
    [UIView animatewithDuration:0.5f animations:^{self.viewThatAnimates.frame = prevRect}];
}

在我的 collectionViewController 上:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
        [cell loadCellWithAnimation];
    return cell;
}

正如我所说,“重用”动画效果很好,但从笔尖唤醒时它不会运行。

我已经在几种不同的情况下对此进行了测试,结果始终相同。

感谢您的帮助;)

【问题讨论】:

  • 一点点补充,当我运行动画块有一点延迟(dispatch_after 有 0.05 秒延迟)时,动画可以运行

标签: ios objective-c animation uicollectionview uiviewanimation


【解决方案1】:

因为直到

return cell;

已从您的委托方法调用,awakeFromNib 未被调用。

你可以试试动画

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath

希望它有效。

干杯。

【讨论】:

  • 当我尝试使用这个部分时,发生了 2 件奇怪的事情。第一个是这个委托方法被称为异步,并且在调用“awakeFromNib”时经过长时间延迟(大约 2-3 秒),第二个是我有一个我在我的 collectionviewCells 中使用的对象数组,这个数组大小是“0 “在“didEndDisplayingCell”方法中,但在“cellForIndexPath”方法中看起来很完整。我猜“didDisplayCell”方法的线程在数组生成之前被异步调用,但它仍然很奇怪。
  • 将动画与单元初始化和其他内容分开。 2-3 秒是很长的时间,但它会立即调用。如果您的应用使用 iOS>=8.0,您可以尝试使用 willDisplayMethod 进行动画处理,这也可能对您有用。
  • 如果有帮助,您可以查看此链接aplus.rs/2014/how-to-animate-in-uicollectionview-items
  • 来自collectionView didEndDisplayingCell: 的参考:“使用此方法检测单元格何时从集合视图中删除,而不是监视视图本身以查看它何时消失”(developer.apple.com/library/ios/documentation/UIKit/Reference/…
猜你喜欢
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多