Я копирую интерфейс напоминаний Passbook/iOS7, в котором есть куча карточек, сложенных друг над другом, со смещением, чтобы верхняя часть карты была видна. Существует один основной вид прокрутки, и каждая карта добавляется в качестве подпредставления.
Когда пользователь прокручивается вверх, я хочу, чтобы самая верхняя карта была закреплена наверху, поэтому 1 складывается на 0, 2 складывается на 1 и т. д.
У меня это работает с использованием моего делегата scrollview:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y < 0) return;
int offsetBetweenItems = 50;
int indexForTopCard = (int)(scrollView.contentOffset.y / offsetBetweenItems);
Card *card = self.cards[indexForTopCard];
card.frame = CGRectMake(0, scrollView.contentOffset.y, card.frame.size.width, card.frame.size.height);
}
На самом деле это отлично работает, пока прокручивается плавно и медленно. Тем не менее, при агрессивной прокрутке обратно к верхней (0) карте, стек становится все испорченным, и я теряю свое равномерное смещение в 50 пикселей.
Я думаю, это происходит из-за того, как я нахожу Карту с indexForTopOfCard
. Если я прокручиваю слишком быстро, нет никакой гарантии, что я смогу отрегулировать каждую карту по порядку, а иногда несколько карт вообще пропускаются.
Как лучше всего гарантировать, что каждая карта будет настроена по порядку?