我提出了一个带有uicollectionview的视图控制器。我希望细胞从顶部开始动画。
我的布局是flowlayout的子类,因此我重写了此方法:
- (UICollectionViewLayoutAttributes *) initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewLayoutAttributes* attributes = [super initialLayoutAttributesForAppearingItemAtIndexPath:indexPath];
CGFloat height = [self collectionViewContentSize].height;
attributes.transform3D = CATransform3DMakeTranslation(0, -height, 0);
return attributes;
}
它几乎可以正常工作,但是我看到单元在进行动画处理之前会短暂出现在屏幕上(闪烁)。
有什么想法为什么它们在应用转换之前会出现在最终位置,以及如何防止这种情况发生?
最佳答案
而不是设置变换,而是更改中心:
- (UICollectionViewLayoutAttributes *) initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewLayoutAttributes* attributes = [super initialLayoutAttributesForAppearingItemAtIndexPath:indexPath];
CGPoint c = attributes.center;
c.y -= self.collectionViewContentSize.height;
attributes.center = c;
return attributes;
}
更改变换总是会导致确定可见性的问题,因为这样做会使
frame
属性无效。