A UIScrollViewmit aktiviertem Paging stoppt bei einem Vielfachen seiner Rahmenbreite (oder -höhe). Der erste Schritt besteht also darin, herauszufinden, wie breit Ihre Seiten sein sollen. Machen Sie das die Breite der UIScrollView. Stellen Sie dann die Größe Ihrer Unteransicht so groß ein, wie Sie sie benötigen, und legen Sie ihre Zentren basierend auf Vielfachen der UIScrollViewBreite der Unteransicht fest .
Dann, da Sie die anderen Seiten sehen möchten, stellen Sie natürlich ein clipsToBounds, NOwie mhjoy angegeben hat. Der Trick besteht nun darin, einen Bildlauf durchzuführen, wenn der Benutzer das Ziehen außerhalb des Bereichs des UIScrollViewRahmens startet . Meine Lösung (als ich dies kürzlich tun musste) war wie folgt:
Erstellen Sie eine UIViewUnterklasse (dh ClipView), die die UIScrollViewund ihre Unteransichten enthält. Im Wesentlichen sollte es den Rahmen haben, den Sie UIScrollViewunter normalen Umständen annehmen würden. Platzieren Sie das UIScrollViewin der Mitte des ClipView. Stellen Sie sicher, dass das ClipView's auf clipsToBoundsgesetzt ist, YESwenn seine Breite kleiner als die der übergeordneten Ansicht ist. Auch das ClipViewbraucht einen Verweis auf die UIScrollView.
Der letzte Schritt ist das Überschreiben - (UIView *)hitTest:withEvent:innerhalb der ClipView.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return [self pointInside:point withEvent:event] ? scrollView : nil;
}
Dies erweitert im Grunde den Berührungsbereich von UIScrollViewauf den Rahmen der Ansicht seiner Eltern, genau das, was Sie brauchen.
Eine andere Möglichkeit wäre, UIScrollViewdie - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) eventMethode zu unterklassifizieren und zu überschreiben. Sie benötigen jedoch weiterhin eine Containeransicht, um das Abschneiden durchzuführen, und es kann schwierig sein, anhand YESdes UIScrollViewFrames des Frames zu bestimmen, wann zurückgegeben werden soll.
HINWEIS: Sie sollten sich auch Juri Pakaste's hitTest: withEvent: Modifikation ansehen, wenn Sie Probleme mit der Benutzerinteraktion in der Unteransicht haben.