Va bene per questo caldo?
Così nel viewDidLoad mio principale del controller della vista che identificano i punti di vista per caricare nelle cellule uicollectionview in un array:
NSArray *vcs = [@"view5", @"view1", @"view2", @"view3", @"view4", @"view5", @"view1"]
Ho anche impostato contare i nostri PageControl a:
self.pageControl.numberOfPages = vcs.count - 2; // for the fake first and last cells
Ho poi un'istanza di i viewcontrollers nel viewDidLoad del controller della vista principale e impostano l'alpha per la collectionview su 0. Quindi nel nostro scrollViewDidEndDecelerating gestisco il Carousel (passa dall'ultima cella alla prima e alla prima cella per ultima) e aggiorno il pageControl per refle ct il numero di pagina "reale".
- (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;
}
}
Poi nell'attuazione CollectionView faccio la seguente:
numberOfItemsInSection = vcs.count
e viewDidAppear per caricare la prima cella (se è la cella a indexPath.row == 1 o 2 o 3 .. . (1 essendo la prima pagina reale non 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;
}];
}
penso che dice tutto. il resto delle implementazioni sia per il vc principale e la CollectionView sono di serie. Così ora ho una visione collezione che carica le altre viste e i loro VC che hanno ciascuno la propria animazione o altro. Salvare indexPath.row in NSUserDefaults in modo che la cella in cui mi trovavo quando esco sia la prima cella da mostrare al prossimo caricamento.
speranze che questo aiuta qualcuno, so che ha fatto per me, purtroppo l'uso di librerie 3rd party è stato scoraggiato così ho dovuto costruire questo cattivo ragazzo in su (con l'aiuto di @He Era, grazie ancora!)
I temo che sia un po 'più complicato delle immagini all'interno della vista, queste viste sono caricate dallo storyboard (al contrario di usare i pennini e caricandole dentro) e ognuna di esse ha i propri controller di visualizzazione e tali da essere integrati. Inoltre, l'uso di uicollectionview, anche se non assolutamente obbligatorio, è fortemente raccomandato per mantenere la coerenza con il resto dell'app. Pensi che potrei impostare il numero di celle su un numero veramente alto, quindi spostare il contenuto e tutto il resto nella cella successiva? (Penso di averlo visto da qualche parte, ma questo deve avere problemi di prestazioni no?) – JakeTheBraek
Anche se è più complesso, il principio dovrebbe essere lo stesso, si mescolano i dati di supporto quando la vista della collezione si trova in uno stato di riposo. L'ho fatto con successo su scrollview, tableview e gerarchie di viste di tabelle all'interno di una tabella senza problemi. Se non vuoi fare confusione con i tuoi dati di backup, puoi inserirli in un archivio dati temporaneo e farlo fuori? Ho anche fatto le cose con il numero più alto di celle, ma questo è solo per mantenere l'illusione mentre stiamo scorrendo i dati. Non sarà mai infallibile. – foundry
Grazie per il tuo aiuto. Era, la teoria qui sembra valida e dovrebbe tradurre ok al mio punto di vista. Ho intenzione di provare e duplicare la prima cella dopo l'ultima e viceversa e scattare nelle celle. Una volta terminato il rallentamento, spostare l'utente nella prima cella "reale" o nella "vera" ultima cella in base alla direzione. Tenendo le dita incrociate. – JakeTheBraek