2012-12-06 11 views
5

アップルのUICollectionViewのサンプルコードを見ていて、誰かが私に何か説明できるかどうか疑問に思っていました。彼らは、コレクションビューで水平スクロールを停止するには、このコードを使用します。UICollectionView内のスクロールを中止する

- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity 
{ 
    CGFloat offsetAdjustment = MAXFLOAT; 
    CGFloat horizontalCenter = proposedContentOffset.x + (CGRectGetWidth(self.collectionView.bounds)/2.0); 

    CGRect targetRect = CGRectMake(proposedContentOffset.x, 0.0, self.collectionView.bounds.size.width, self.collectionView.bounds.size.height); 
    NSArray* array = [super layoutAttributesForElementsInRect:targetRect]; 

    for (UICollectionViewLayoutAttributes* layoutAttributes in array) { 
     CGFloat itemHorizontalCenter = layoutAttributes.center.x; 

     if (ABS(itemHorizontalCenter - horizontalCenter) < ABS(offsetAdjustment)) { 
      offsetAdjustment = itemHorizontalCenter - horizontalCenter; 
     } 
    }  
    return CGPointMake(proposedContentOffset.x + offsetAdjustment, proposedContentOffset.y); 
} 

私は、彼らがやろうとしているものを得ることはありません。私が理解している唯一の部分は、targetRectを作成し、targetRect内のそれらの要素の属性を取得することです。しかし、そこから、彼らはなぜ彼らが何をするのかわかりません。このoffsetAdjustmentはどこから来ますか?なぜMAXFLOATを使用するのですか?どんな考えでも大変感謝しています。ありがとう!

答えて

3

コードの目的は、特定のセルにスクロールするようにスクロールする終了位置を調整することです。これはoffsetAdjustmentで行われます。 MAXFLOATはちょうど初期値です。ループ内のフレームoffsetAdjustmentは、ターゲットフレームとターゲットフレームの中央に最も近いセルの中心間の水平距離まで反復的に減少される。

このx分だけターゲットフレームのオフセットを戻すことで、スクロールがこの最も近いセルにスナップします。

関連する問題