iOS UICollectionView 缩放居中单元格

3
我的UICollectionViewFlowLayout子类没有正确地放大在UICollectionView中心的单元格。相反,当我水平滚动时,我的UICollectionViewCell会消失和重新出现。我猜测问题在于ACTIVE_DISTANCE值。什么是ACTIVE_DISTANCE以及以下代码中如何使用它? 我正在遵循WWDC 2012讲座高级UICollectionView提示,他们的代码看起来像这样...
#define ITEM_SIZE 200
#define ACTIVE_DISTANCE 200
#define ZOOM_FACTOR 0.3

-(id) init {
self = [super init];
if (self) {
    self.itemSize = CGSizeMake(ITEM_SIZE, ITEM_SIZE);
    self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    self.minimumLineSpacing = 50;
}
return self;
}



-(NSArray*) layoutAttributesForElementsInRect:(CGRect)rect {
NSArray* array = [super layoutAttributesForElementsInRect:rect];
CGRect visibleRect;
visibleRect.origin = self.collectionView.contentOffset;
visibleRect.size = self.collectionView.bounds.size;
for (UICollectionViewLayoutAttributes* attributes in array) {
    if (CGRectIntersectsRect(attributes.frame, rect)) {
        CGFloat distance = CGRectGetMidX(visibleRect) - attributes.center.x;
        CGFloat normalizedDistance = distance / ACTIVE_DISTANCE;
        if (ABS(distance) < ACTIVE_DISTANCE) {
            CGFloat zoom = 1 + ZOOM_FACTOR*(1 - ABS(normalizedDistance));
            attributes.transform3D = CATransform3DMakeScale(zoom, zoom, 1.0);
            attributes.zIndex = round(zoom);
        }
    }
}
return array;
}

在我的代码中,我的init方法看起来就像这样:
-(id) init {
self = [super init];
if (self) {
}
return self;
}

我的代理方法在视图控制器中是这样的:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return CGSizeMake(260, 390);
}

我的ACTIVE_DISTANCE值应该是多少?

谢谢!

1个回答

3

我找到了问题所在。 当缩放比例为0.3时,我的单元格会开始相互重叠。一旦它们与其他单元格重叠,它们就会消失。将缩放比例降低到约0.05,这个问题就解决了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接