この暑さの準備はいいですか?
したがって、メイン ビュー コントローラーの 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 でビュー コントローラーをインスタンス化し、コレクションビューのアルファを 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;
}
}
次に、コレクションビューの実装で次のことを行います。
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 とコレクションビューの両方の残りの実装は標準です。これで、それぞれ独自のアニメーションなどを持つ他のビューとその VC をロードするコレクション ビューができました。indexPath.row を NSUserDefaults に保存して、私が去ったときにいたセルが、次の読み込み時に表示される最初のセルになるようにします。
これが誰かの助けになることを願っています。残念ながら、サードパーティのライブラリの使用は推奨されていなかったため、この悪い男の子を構築する必要がありました(@He Wasの助けを借りて、もう一度感謝します!)