UITableView
にscrollViewDidScroll:
メッセージ(または必要に応じて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;
}
}
これは袖口から外されており、かなりのデバッグが必要です。
それは素晴らしい解決策です!項目をコンテンツオフセットの中心にどのくらい近いかに比例して拡大縮小する方法について、短いコード例を教えてください。それは非常にスムーズに聞こえる! – spentak
これは実際にすべて素晴らしいですが、問題はすべての項目の拡大縮小です。スクロールビュー内のどの項目が「naturalCentre」内にあるかを検出するには – spentak
ここで意味することはわかりません。すべての内容がスケールされ、contentOffsetが項目の自然中心からどれだけ離れているかに比例します。 'contentOffset'が正確に自然中心にある場合、縮尺は1です。それが自然中心から遠いほど、縮尺は0.5に近づきます。どのアイテムが中央にあるかを「検出」するには、オフセットを見て各アイテムの中心と比較するだけですか? –