4

我展示了一个带有 uicollectionview 的视图控制器。我希望细胞从顶部动画。

我的布局是flowlayout的子类,所以我重写了这个方法:

- (UICollectionViewLayoutAttributes *) initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewLayoutAttributes* attributes = [super initialLayoutAttributesForAppearingItemAtIndexPath:indexPath];
    CGFloat height = [self collectionViewContentSize].height;
    attributes.transform3D = CATransform3DMakeTranslation(0, -height, 0);
    return attributes;
}

它几乎可以工作,但我看到单元格在它们动画之前在屏幕上暂时出现(闪烁)。

任何想法为什么它们在应用转换之前出现在最终位置,以及我如何防止这种情况?

4

1 回答 1

0

与其设置变换,不如更改中心:

- (UICollectionViewLayoutAttributes *) initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewLayoutAttributes* attributes = [super initialLayoutAttributesForAppearingItemAtIndexPath:indexPath];
    CGPoint c = attributes.center;
    c.y -= self.collectionViewContentSize.height;
    attributes.center = c;
    return attributes;
}

更改转换总是会导致确定可见性的问题,因为这样做会使frame属性无效。

于 2014-05-04T00:12:40.460 回答