2012-02-25 20 views
5

Mam UIScrollView, którego rozmiar treści to 1200x480. Mam na nim kilka widoków obrazu, których szerokość wynosi do 600. Kiedy przewijam w prawo, po prostu zwiększam rozmiar zawartości i ustawię przesunięcie tak, aby wszystko było gładkie (chcę dodać inne obrazy, ale to nie jest ważne teraz). Zasadniczo obrazy znajdujące się w rzutni pozostają gdzieś po lewej stronie, aby w końcu usunąć je z widoku.Nieskończone przewijanie w poziomie UIScrollView

Problem, który pojawił się podczas przewijania w lewo. Robię to, przesuwając obrazy na koniec rozmiaru zawartości (dodaj 600 do każdego origin.x) widoku obrazu, a następnie ustaw odpowiednio offset zawartości. Działa, gdy palec jest na ekranie, a użytkownik przeciąga (scrollView.isTracking = YES). Gdy użytkownik przewinie w lewo i puści (scrollView.isTracking = NO), widoki obrazów będą się przesuwały zbyt szybko w prawo i znikają niemal natychmiast. Czy ktokolwiek wie, w jaki sposób mogłem ładnie przesuwać obrazy i nie znikać, nawet jeśli użytkownik nie ręcznie przeciąga widoku i już go puści?

Oto mój kod do przeciągania w poziomie:

-(void) scrollViewDidScroll:(UIScrollView *)scrollView { 
    CGPoint offset = self.scrollView.contentOffset; 
    CGSize size = self.scrollView.contentSize; 

    CGPoint newXY = CGPointMake(size.width-600, size.height-480); 

    // this bit here allows scrolling towards the right 
    if (offset.x > size.width - 320) { 
     [self.scrollView setContentSize:CGSizeMake(size.width+320, size.height)]; 
     [self.scrollView setContentOffset: offset]; 
    } 

    // and this is where my problem is: 
    if (offset.x < 0) { 
     for (UIImageView *imageView in self.scrollView.subviews) { 
      CGRect frame = imageView.frame; 
      [imageView setFrame:CGRectMake 
       (frame.origin.x+newXY.x, frame.origin.y, 200, frame.size.height)]; 
     } 
     [self.scrollView setContentOffset:CGPointMake(newXY.x+offset.x, offset.y)]; 
    } 
} 

EDIT: To teraz pracuje - Musiałem spojrzeć na StreetScroller i to wszystko jest dobre teraz.

Jednak teraz chcę powiększyć widok przewijania, ale viewForZoomingInScrollView nigdy nie jest wywoływany. Czy powiększenie przewijania o dużym rozmiarze nie jest możliwe?

+0

ktoś, proszę? :) –

Odpowiedz

5

Jest tu kilka podejść. Po prostu użyj wyszukiwania na stronie ...

Jeśli chcesz bardziej "oficjalnego" przykładu stworzonego przez Apple, spójrz na StreetScroller Demo. Aby uzyskać więcej informacji na temat tego przykładu, spójrz na ostatnie lata sesji WWDC. 104 Zaawansowane przewijanie Zobacz techniki.

Istnieje również podklasa UIScrollView na Github nazywa BAGPagingScrollView, który jest stronicowania & nieskończony, ale ma kilka błędów masz rozwiązać na własną rękę, ponieważ nie jest pod aktywnego rozwoju (szczególnie metoda goToPage: prowadzi do problemów) .

+0

Dzięki :) Spojrzałem na StreetScroller i działa bezbłędnie za pomocą metody recenterIfNecessary. –

+0

Cieszę się, że tutaj! – dom

+0

Dzięki :) Chcę powiększyć mój scrollview, ale viewForZoomingInScrollView nigdy nie jest wywoływany. Mam userInteractionEnabled ustawioną na TAK. –

Powiązane problemy