Вам необходимо иметь делегата на UITableView
, который принимает сообщение scrollViewDidScroll:
(или, возможно, scrollViewDidEndDecelerating:
, в зависимости от ваших потребностей). См. документацию UITableViewDelegate .
Я делаю такую проверку внутри scrollViewDidScroll
. Я проверяю текущее смещение содержимого, и если прямоугольник, образованный текущим смещением и размером рамки просмотра с прокруткой, соответствующим образом пересекается с одной из моих страниц просмотра с прокруткой, то у меня обновляется 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;
}
}
Это списано с манжеты и потребует довольно много отладки.