3

私の 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 の値はどうすればよいですか?

ありがとう!

4

1 に答える 1

3

私は問題を理解しました。0.3のズームで、私のセルは互いに重なり始めます。それらが別のセルと重なるとすぐに、それらは消えます。ズームを約0.05に減らすことで、問題が修正されました。

于 2013-01-14T02:04:25.330 に答える