2012-01-16 12 views
1

私は常に3つの項目を表示するスクロールビューを持っています。私は大きなアイテムにはミドルアイテムが必要で、左側と右側には小さなアイテムが必要です。iOS UIScrollView - ページングのスワイプを検出 - 中のアイコン小さい他の大きなアイコン

私の質問は、ページングスワイプをどのように検出できますか?私がやっていることは、scrollviewが "ページング"されるたびに、スクロールビュー内のすべての項目をチェックし、アイテムが中央の "フレーム"にある場合はそれを大きくします。

私はこれについて最善の方法ですか?

答えて

3

UITableViewscrollViewDidScroll:メッセージ(または必要に応じてscrollViewDidEndDecelerating:)を受け入れる代理人が必要です。 the UITableViewDelegate documentationを参照してください。

scrollViewDidScrollの内部でこの種のチェックを行います。現在のコンテンツのオフセットを確認し、現在のオフセットとスクロールビューフレームのサイズによって形成される矩形がスクロールビューページの1つと適切に交差している場合は、pageが更新されます。ここでは、現在のコンテンツオフセットの中心にどれくらい近いかに比例して各アイテムをスケーリングすることができます(スクロール側のドックスタイルの拡大効果が得られます)。

編集:したがって、水平にページをスクロールするスクロールの「項目」の配列に対する仮説のない疑似コード。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGPoint *currentOffset = scrollView.contentOffset; 

    for (UIView *item in itemsToDisplay) 
    { 
    // The location in the entire scroll view canvas at which 
    // we consider this item to "live" 
    CGPoint *naturalCentre = item.naturalCentre; 

    // How far from our desired point are we? 
    CGFloat scale = 100 - fabs(naturalCentre.x - contentOffset.x); 
    // Clamp this to positive values only, and normalize from 0.5 to 1 
    scale = 0.5 + (scale < 0 : 0 ? (scale/200)); 

    // Scale this view accordingly 
    item.layer.contentsScale = scale; 
    } 
} 

これは袖口から外されており、かなりのデバッグが必要です。

+0

それは素晴らしい解決策です!項目をコンテンツオフセットの中心にどのくらい近いかに比例して拡大縮小する方法について、短いコード例を教えてください。それは非常にスムーズに聞こえる! – spentak

+0

これは実際にすべて素晴らしいですが、問題はすべての項目の拡大縮小です。スクロールビュー内のどの項目が「naturalCentre」内にあるかを検出するには – spentak

+0

ここで意味することはわかりません。すべての内容がスケールされ、contentOffsetが項目の自然中心からどれだけ離れているかに比例します。 'contentOffset'が正確に自然中心にある場合、縮尺は1です。それが自然中心から遠いほど、縮尺は0.5に近づきます。どのアイテムが中央にあるかを「検出」するには、オフセットを見て各アイテムの中心と比較するだけですか? –

関連する問題