我正在复制一个 Passbook/iOS7 提醒界面,其中有一堆堆叠在一起的卡片,偏移以便卡片的顶部显示出来。有一个主滚动视图,每张卡片都添加为子视图。
当用户向上滚动时,我希望最上面的卡片固定在顶部,所以 1 堆叠在 0 上,2 堆叠在 1 上,等等。
我使用我的滚动视图的委托让它工作:
- (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) 卡片时,堆叠变得一团糟,我失去了统一的 50px 偏移。
我认为这是因为我如何找到带有indexForTopOfCard
. 如果我滚动得太快,则无法保证我能够按顺序调整每张卡片,有时会完全跳过几张卡片。
确保每张卡都保证按顺序调整的最佳方法是什么?