UICollectionViewLayoutAttributes

UICollectionViewLayoutAttributes

我提出了一个带有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属性无效。

09-20 17:15