【发布时间】:2017-05-20 05:03:23
【问题描述】:
我正在使用didMoveToWindow: 来触发带有自定义 UICollectionViewCell 的动画。奇怪的是...对于第一个和第二个单元格,动画效果很好(并且所有应该调用的方法都被调用)...
...对于第 3 个单元格,它会显示出来,但不会为第 3 个单元格调用 didMoveToWindow:、willMoveToWindow:、didMoveToSuperview: 和 willMoveToSuperview:。我什至尝试过drawRect:,但它也从未被调用...
我不明白如何在不调用 drawRect: 的情况下在屏幕上绘制它。
在drawRect:我只是打印到日志,然后调用super实现。即使从未调用/打印日志消息,这样做确实会使背景变黑(通常它是透明的)。所以那一定是……做了什么……?
每个单元格出现在该位置周围,然后被移动到位。背景表示 UICollectionView 的框架.. 显示一切都在边界内。
更新:
我尝试使用didAddSubview:,但同样的事情......它只在前两个单元格中调用过。但是,当插入第 3 个单元格并重新加载第 2 个单元格并为第 2 个单元格调用 didAddSubview: 时...集合视图的可见单元格计数为 3。
更新2:
当我通过 Xcode 检查视图层次结构时,它会将所有 3 个单元格显示为集合的子视图......但不知何故,它只为前两个调用 addSubview: didAddSubview:.. 奇怪
【问题讨论】:
-
tableviewcell 可以重复使用,如果它已经显示
didMoveToWindow:或willMoveToWindow将不会被调用,因为它已经被添加了。 -
对不起,我应该添加。我看着它创建了第三个对象。
initWithFrame:在第三个单元格上,cellForItemAtIndexPath:在集合上。还有就是屏幕上同时有 3 个单元格,至少要有 3 个单元格。 -
是的,我也错过了...所有 3 个单元格都在屏幕上..
-
也许您可以尝试将动画代码放在 cellForRow where (cell==nil) 中?
-
@GeneCode 我正在考虑在
cellForItemAtIndexPath:之后启动一个计时器,并轮询可见的单元格计数,然后当它添加到该数组时...启动动画(因为我无法观察到该计数以任何方式)。
标签: ios objective-c uiview uiviewanimation