通过结合使用 grimfrog 和 Charlie Elliott 的反应,我设法得到了我所追求的行为。
Charlie Elliott 的解决方案为集合视图中的项目获得了正确的最终结果,但在动画期间仍然对 zIndex 产生了吸附效果。
grimfrog 的解决方案提供了正确的外观,但在布局更改后 zIndex 仍然不正确,尽管看起来正确。
两者的结合虽然不是一个很好的解决方案,但确实有效并且确实使用了 UICollectionViewLayoutAttributes 支持的 transform 和 zIndex 属性
在我的布局中,我有
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
[attributes enumerateObjectsUsingBlock:^(UICollectionViewLayoutAttributes *attributes, NSUInteger idx, BOOL *stop) {
attributes.zIndex = attributes.indexPath.item + 1;
}];
return attributes;
}
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewLayoutAttributes *attributes = [super layoutAttributesForItemAtIndexPath:indexPath];
attributes.transform3D = CATransform3DMakeTranslation(0, 0, attributes.indexPath.item);
return attributes;
}
我不会把它作为正确的答案,因为我确信必须有另一种方法来解决这个问题,但我很想看看这是否也能解决其他人的问题。