2

我正在为UICollectionView. 这是一个足够简单的概念,为了更容易,有大约 100 个关于该主题的教程。然而,任何做变换的人都知道,m34神奇的数字。然而,一旦我将它设置为我的旋转获得一些视角,视图就会消失。仅在旋转接近 0 时出现。

我怀疑这是一个 bounds/zIndex 问题,但是经过几天的 zIndexes 和裁剪调整后,单元格只是拒绝出现。非常感谢任何帮助。

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
    NSArray *array = [super layoutAttributesForElementsInRect:rect];

    CGRect visibleRect = (CGRect){self.collectionView.contentOffset, self.collectionView.bounds.size};

    CGFloat maxDistance = visibleRect.size.width / 2.0;
    CGFloat maxRotation = M_PI_2;

    [array enumerateObjectsUsingBlock:^(UICollectionViewLayoutAttributes * attributes, NSUInteger idx, BOOL *stop) {

        CGFloat distanceFromCenter = CGRectGetMidX(visibleRect) - attributes.center.x;

        CGFloat percentageFromCenter = distanceFromCenter / maxDistance;
        percentageFromCenter = MIN(percentageFromCenter, 1.0);
        percentageFromCenter = MAX(percentageFromCenter, -1.0);

        CGFloat angle = percentageFromCenter * maxRotation;

        CATransform3D transform = CATransform3DIdentity;
//        transform.m34 = 1.0 / -800.0;
        transform = CATransform3DRotate(transform, angle, 0.0, 1.0, 0.0);

        attributes.transform3D = transform;
    }];

    return array;
}
4

1 回答 1

3

因此,感谢 Twitter 上的 @mpospese。问题不在于m34价值本身。它具有UICollectionView.

当框架高度超过集合视图的高度时,单元格被删除

所以在我的情况下,我有一个UICollectionViewLayout专门设计的用来抓取heightUICollectionView使用它来测量单元格的高度。问题是,当m34考虑到明显调整框架并因此超出范围时。与其像大多数操作一样直接剪裁单元格,而是UIView直接指向问题,UICollectionView实际上会自动完全删除单元格,如果它们像刷外部边界一样多。

于 2013-07-18T02:10:45.990 回答