我提供了一个带有uicollectionview的视图控制器。我希望细胞从顶部开始动画。
我的布局是flowlayout的子类,所以我重写了这个方法:
- (UICollectionViewLayoutAttributes *) initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewLayoutAttributes* attributes = [super initialLayoutAttributesForAppearingItemAtIndexPath:indexPath];
CGFloat height = [self collectionViewContentSize].height;
attributes.transform3D = CATransform3DMakeTranslation(0, -height, 0);
return attributes;
}
它几乎可以工作,但是我看到细胞在它们动画之前暂时出现(闪烁)在屏幕上。
为什么它们会在变换应用之前出现在最终位置的任何想法,以及我如何阻止它?
答案 0 :(得分: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
属性失效。