我的 UICollectionViewFlowLayout 子类没有正确放大 UICollectionView 中心的单元格。相反,当我水平滚动时,我的 UICollectionViewCell 会消失并重新出现。我的猜测是问题出在 ACTIVE_DISTANCE 值上。什么是 ACTIVE_DISTANCE 以及如何在以下代码中使用它?
我正在关注 WWDC 2012 Lecture Advanced 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 值应该是多少?
谢谢!