2013-04-25 9 views
6

Szukałem kilka spożywczych na stackoverflow jakJak mogę wykryć następną stronę numer UIScrollView, który jest "scrollView.pagingEnabled" = YES? w 'scrollViewDidEndDragging'?

CGFloat pageWidth = scrollView.frame.size.width; 
int pageNumberToBeScrolled = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
if (pageNumberToBeScrolled != 1) { 
    // Do what I want 
} 

w

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate; 

Ale to działa tylko wtedy, gdy ja tak powoli przewijać przewijania strony jest zdecydowanie przeniósł ponad połowę tego. To nie działa, jeśli przewijam szybko jak machnięcie. Właśnie przewijałem się jak 30% przewijanej strony, co nie satysfakcjonuje sytuacji, ale przewinęło się do następnej strony i chcę ją wykryć.

Jak wykryć lub złapać wszystkie sytuacje scroll-to-next-page? Proszę mi dać jakąś pomoc :)

EDIT

ja pracuję nad tym, ponieważ chcę, aby odtworzyć dźwięk efektu podczas przewijania do następnej strony zdarza. Powinienem wykryć, gdy palec zniknie z ekranu i tylko po przewinięciu następnej strony. Myślę, że gdybym się tym zająć na scrollViewDidEndDragging, to będzie dla mnie najlepsza :)

Odpowiedz

22

używam tego kodu, aby wykryć, czy jest currentPage zmienione, nie ma znaczenia, że ​​przewijasz bardzo szybko lub bardzo wolno.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
     static NSInteger previousPage = 0; 
     CGFloat pageWidth = scrollView.frame.size.width; 
     float fractionalPage = scrollView.contentOffset.x/pageWidth; 
     NSInteger page = lround(fractionalPage); 
     NSLog(@"%d",page); 
     if (previousPage != page) { 
      previousPage = page; 
      /* Page did change */ 
     } 
} 
+0

Dziękuję za odpowiedź :) Pracuję nad kodem do wykorzystania w moim projekcie, niestety, to nie pasuje do mojego. 'Chcę" odtwarzać dźwięk efektu ", jak wyjaśniam moją' edycję EDIT'. Muszę wykryć, kiedy mój palec zniknie z ekranu, ale jeśli użyję twojego kodu, '/ * Strona zmieniła * /' część o nazwie 'podczas gdy mój palec na ekranie' i porusza się w lewo i w prawo, aby przesunąć o ponad połowę scrollView. Wtedy moja aplikacja nadal odtwarza dźwięki z efektami. Czy możesz rozwiązać to na 'scrollViewDidEndDragging'? Jeśli poradzę sobie z tą metodą, to będzie najlepiej :) –

+0

mstfbsnli, Twój kod pomoże mi w rozwiązaniu mojej sytuacji. Dziękuję za twoje starania ;-) –

+1

Wygląda na to, że działa dobrze, ale wpadłem na podobny problem jak Steven - muszę wykryć, kiedy mam palec z ekranu, ale jeśli użyję twojego kodu,/* Strona zmieniła się */część wywoływana, podczas gdy mój palec na ekranie. Czy wybraliście ten problem? Co mogę zrobić w tym przypadku? – Xcoder

1

spróbować jak to może być it'l pomaga

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
     float fractionalPage = scrollView.contentOffset.x/320; 
     NSInteger page1 = lround(fractionalPage); 
     NSLog(@"%d",page1); 
} 
+1

320? Czy będzie działać, gdy urządzenie jest na iPada lub gdy użytkownik obraca urządzenie? – limon

+0

Ten kod wykrywa następną stronę. Dziękuję @Sunny. I @mstfbsnli, myślę, że zadziała, jeśli '320' ->' [UIScreen mainscreen] .bounds.size.width'. Ale problem polega na tym, że chcę go złapać zaraz po tym, jak mój palec zniknie z ekranu. Jest to ten sam czas, kiedy '- (void) scrollViewDidEndDragging: (UIScrollView *) scrollView willDeler przyspiesza: (BOOL) zwalnia;' jest wywoływane. @Sunny, możesz mi pomóc w tym czasie? –

+0

'320' ->' scrollView.frame.size.width'? –

Powiązane problemy