准备好迎接这种热度了吗?
因此,在我的主视图控制器的 viewDidLoad 中,我确定了要加载到数组中 uicollectionview 单元格中的视图:
NSArray *vcs = [@"view5", @"view1", @"view2", @"view3", @"view4", @"view5", @"view1"]
我还将我们的 pagecontrol 计数设置为:
self.pageControl.numberOfPages = vcs.count - 2; // for the fake first and last cells
然后我在主视图控制器的 viewDidLoad 中实例化视图控制器,并将 collectionview 的 alpha 设置为 0。然后在我们的 scrollViewDidEndDecelerating 中我处理轮播(从最后一个单元格到第一个单元格,从第一个单元格到最后一个)并更新 pageControl 以反映“真实”的页码。
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
// Snaps into the cell
CGFloat pageWidth = scrollView.frame.size.width;
float fractionalPage = scrollView.contentOffset.x / pageWidth;
NSInteger page = lround(fractionalPage);
self.pageControl.currentPage = page - 1; // because our first cell is the last cell for animation purposes only
// Carousel from first to last and last to first while updating pagecontrol
if (page == 0) {
[self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:self.activeGaugeClusters.count - 2 inSection:0]
atScrollPosition:UICollectionViewScrollPositionLeft
animated:NO];
// Set our pagecontrol circles to the appropriate page indicator
self.pageControl.currentPage = self.activeGaugeClusters.count - 2;
} else if (page == self.activeGaugeClusters.count -1) {
[self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]
atScrollPosition:UICollectionViewScrollPositionLeft
animated:NO];
self.pageControl.currentPage = 0;
}
}
然后在 collectionview 实现中,我执行以下操作:
numberOfItemsInSection = vcs.count
和 viewDidAppear 用于加载第一个单元格(无论是 indexPath.row == 1 或 2 或 3 处的单元格...(1 是第一个真实页面而不是 0)
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:self.lastGaugePanel inSection:0]
atScrollPosition:UICollectionViewScrollPositionLeft
animated:NO];
self.pageControl.currentPage = self.lastGaugePanel - 1;
[UIView animateWithDuration:0.5 animations:^{
self.collectionView.alpha = 1.0;
}];
}
我想大概总结一下。主 vc 和 collectionview 的其余实现都是标准的。所以现在我有一个集合视图,可以加载其他视图和它们的 VC,每个视图都有自己的动画或其他内容。我将 indexPath.row 保存到 NSUserDefaults 以便我离开时所在的单元格是下一次加载时显示的第一个单元格。
希望这对某人有所帮助,我知道它对我有用,不幸的是,不鼓励使用 3rd 方库,所以我不得不建立这个坏男孩(在@He Was 的帮助下,再次感谢!)