A UIScrollViewz włączonym stronicowaniem zatrzyma się przy wielokrotnościach szerokości (lub wysokości) ramki. Więc pierwszym krokiem jest ustalenie, jak szerokie mają być Twoje strony. Spraw, aby szerokość UIScrollView. Następnie ustaw rozmiary widoku podrzędnego, tak duże, jak potrzebujesz, i ustaw ich środki na podstawie wielokrotności UIScrollViewszerokości.
Następnie, ponieważ chcesz zobaczyć inne strony, oczywiście, zestaw clipsToBoundsdo NOjak mhjoy stwierdził. Sztuczka polega teraz na tym, że przewija się, gdy użytkownik rozpoczyna przeciąganie poza zakresem UIScrollViewramki. Moje rozwiązanie (kiedy musiałem to zrobić bardzo niedawno) było następujące:
Utwórz UIViewpodklasę (tj. ClipView), UIScrollViewKtóra będzie zawierać podglądy i jej podziały. Zasadniczo powinien mieć ramy takie, jakie można by przypuszczać UIScrollVieww normalnych okolicznościach. Umieść UIScrollVieww środku ClipView. Upewnij się, że wartość ClipView's clipsToBoundsjest ustawiona na, YESjeśli jej szerokość jest mniejsza niż szerokość widoku nadrzędnego. Ponadto ClipViewpotrzeby odnoszą się do UIScrollView.
Ostatnim krokiem jest zastąpienie - (UIView *)hitTest:withEvent:wewnątrz pliku ClipView.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return [self pointInside:point withEvent:event] ? scrollView : nil;
}
To w zasadzie rozszerza obszar dotykowy UIScrollViewdo ramy widoku jego rodzica, dokładnie to, czego potrzebujesz.
Inną opcją byłoby utworzenie podklasy UIScrollViewi nadpisanie jej - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) eventmetody, jednak nadal będziesz potrzebować widoku kontenera, aby wykonać obcinanie, a określenie, kiedy powrócić, może być trudne YEStylko na podstawie UIScrollViewramki.
UWAGA: Powinieneś także przyjrzeć się hitTest Juri Pakaste : withEvent: modyfikacja, jeśli masz problemy z interakcją użytkownika subview .