Gotowy na tę gorączkę?
Więc w viewDidLoad moim głównym widoku kontrolera za I zidentyfikować poglądy załadować do komórek uicollectionview w tablicy:
NSArray *vcs = [@"view5", @"view1", @"view2", @"view3", @"view4", @"view5", @"view1"]
ja również ustawić liczyć nasz pagecontrol do:
self.pageControl.numberOfPages = vcs.count - 2; // for the fake first and last cells
Potem instancję viewcontrollers w viewDidLoad w głównym widoku kontrolera, a także ustaw alfa dla widoku kolekcji na 0. Następnie w naszym scrollViewDidEndDecelerating obsługuję karuzelę (przechodzę z ostatniej komórki do pierwszej i pierwszej komórki do ostatniej) i aktualizuję stronęControl do refle ct "prawdziwy" numer strony.
- (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;
}
}
Następnie w realizacji CollectionView I wykonaj następujące czynności:
numberOfItemsInSection = vcs.count
i viewDidAppear do ładowania pierwszą komórkę (czy jest to komórka w indexPath.row == 1 lub 2 lub 3 .. . (1 jako pierwsza prawdziwa strona nie 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;
}];
}
myślę, że około podsumowuje. reszta wdrożeń zarówno głównego vc i CollectionView są standardowe. Więc teraz mam widok zbiórki które ładują inne widoki i ich VC, z których każda ma własną animację lub cokolwiek innego. Zapisuję plik indexPath.row w pliku NSUserDefaults, aby komórka, w której znajdowałem się podczas opuszczania, była pierwszą komórką wyświetlaną przy następnym obciążeniu.
Nadzieje to pomaga kogoś, wiem, że to nie dla mnie, niestety korzystanie z bibliotek 3rd party zniechęcił więc musiałem zbudować ten zły chłopiec się (znowu z pomocą @He Czy dzięki!)
I obawiam się, że jest to nieco bardziej skomplikowane niż obrazy w widoku, widoki te są ładowane z storyboardu (w przeciwieństwie do używania stalówek i ładowania ich) i każdy ma swoje własne kontrolery widoku i takie, które są wprowadzane. Ponadto zalecane jest korzystanie z widoku interfejsu, choć nie jest to bezwzględnie obowiązkowe, aby zachować spójność z resztą aplikacji. Czy myślisz, że mógłbym ustawić liczbę komórek na naprawdę dużą liczbę, a następnie przenieść zawartość i wszystko to do następnej komórki? (Myślę, że gdzieś to widziałem, ale to musi mieć problemy z wydajnością?) – JakeTheBraek
Nawet jeśli jest bardziej złożona, zasada powinna być taka sama, tasuje się dane dotyczące kopii zapasowej, gdy widok kolekcji jest w stanie spoczynku. Zrobiłem to z powodzeniem na przeglądarkach, widokach tabel i hierarchiach widoków tabel w widokach tabel bez żadnych problemów. Jeśli nie chcesz zepsuć danych z kopii zapasowej, możesz pobrać go do magazynu danych tymczasowych i zignorować go w zamian? Zrobiłem też rzecz o dużej liczbie komórek, ale to tylko po to, aby utrzymać iluzję, podczas gdy żyjemy - przewijając dane. To nigdy nie będzie nieomylne. – foundry
Dzięki za pomoc On był, Teoria tutaj wydaje się być dobra i powinna przetłumaczyć ok na moją kolekcję. Zamierzam spróbować zduplikować pierwszą komórkę po ostatniej i na odwrót i włożyć ją do komórek. Po wykonaniu spowolnienia ruchu, przenieś użytkownika do "prawdziwej" pierwszej komórki lub "prawdziwej" ostatniej komórki w zależności od kierunku. Trzymam kciuki. – JakeTheBraek