2013-02-14 8 views
6

Próbuję użyć UICollectionView, aby wyświetlić widok po lewej i prawej stronie bieżącego widoku, wyśrodkowany na ekranie.ios - UICollectionView zmienić domyślne przesunięcie podczas poziomego stronicowania

Mam to wyświetlanie poprawnie, ale stronicowanie nie koncentruje się na kolejnych widokach, ponieważ domyślnie jest to szerokość ramki, która wynosi 320.0.

Gdzie jest UICollectionView obliczania domyślnej wartości przesunięcia, której używa podczas przycinania do następnych stron?

Chciałbym zmienić tę wartość. Czy jest lepszy sposób to zrobić? Zasadniczo próbuję odtworzyć doświadczenie używane w wynikach wyszukiwania dla sklepu z aplikacjami na iPhone.

+0

Dziękuje za aluzję do wyników wyszukiwania AppStore (iOS dodaj 6), które naprawdę pomógł ... Chciałbym wiedzieć, co masz na myśli, kiedy mówisz to jest ramka scrollView, masz na myśli, że to jest szerokość twojego ScrollView? –

+0

Niezależnie od tego, o czym wspomniałem w powyższym komentarzu, rozwiązanie, którego szukasz, znajduje się tutaj: http://blog.proculo.de/archives/180-Paging-enabled-UIScrollView- With-Previews.html –

Odpowiedz

11

Okazało się, że musiałem ustawić pagingEnabled = NO i overrode (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView z następujących czynności:

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView 
{ 
    if (self.lastQuestionOffset > scrollView.contentOffset.x) 
    self.currentPage = MAX(self.currentPage - 1, 0); 
    else if (self.lastQuestionOffset < scrollView.contentOffset.x) 
    self.currentPage = MIN(self.currentPage + 1, 2); 

    float questionOffset = 290.0 * self.currentPage; 
    self.lastQuestionOffset = questionOffset; 
    [self.collectionView setContentOffset:CGPointMake(questionOffset, 0) animated:YES]; 
} 

ta odpowiedź pomogła: Paging UIScrollView with different page widths

+2

Kolejną rzeczą, którą odkryłem, było użycie tego podczas przewijania: '[self.collectionView scrollRectToVisible: CGRectMake (questionOffset, 0, self.collectionView.bounds.size.width, self.collectionView.bounds.size.height) animowany: YES] ; 'Działa on znacznie płynniej niż metoda animacji setContentOffset użyta powyżej. – whittwuli

+0

Po prostu przygniotłem to, starając się, aby widok UICollection zachowywał się jak większe prostokąty u góry strony polecanej, jeśli sklep iPhone iOS AppStore. Obecnie pracuję w - (CGPoint) targetContentOffsetForProposedContentOffset: withScrollingVelocity. Ale myślę o wdrożeniu takiego rozwiązania jak twoje. Mam jednak pytanie, czy własność self.lastQuestionOffset jest podobna (rozmiar komórki + wstawka) * (liczba komórek)? – vichudson1

+0

Jeszcze lepszym rozwiązaniem byłoby użycie - '(void) scrollViewWillEndDragging: (UIScrollView *) scrollView withVelocity: (CGPoint) velocity targetContentOffset: (inout CGPoint *) targetContentOffset' następnie obliczyć i ustawić zawartość docelową zgodnie ze swoimi żądaniami przywołania (jest to parametr * inout *) – GreatWiz

0

spróbować ustawić contentOffset w viewDidLayoutSubviews

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    if (viewDidLayoutSubviewsForTheFirstTime) { 
     _collectionView.contentOffset = CGPointMake(...); 
    } 
} 
+0

Jest to praktycznie identyczne z zaakceptowaną odpowiedzią ... – JAL

Powiązane problemy