Überprüfen Sie die Richtung des scrollen in UIScrollView
Ich versuche zu implementieren ist die Methode scrollViewWillBeginDragging.
Wenn diese Methode aufgerufen wird ich überprüfen, ob der Benutzer ausgewählt hat, eine der Schaltflächen, die innerhalb der scrollview im Zustand:ausgewählt.
Wenn nicht, dann zeige ich ein UIAlert um den Benutzer zu informieren.
Mein problem ist hier, ich will nur nennen die Schaltfläche ausgewählte (NextQuestion) - Methode, wenn der Benutzer scrollt von rechts nach Links (ziehen der nächsten Ansicht von rechts).
Aber wenn Sie scrollen von Links nach Rechts dann möchte ich es, um zu Blättern, als normal.
Derzeit die checker-Methode aufgerufen wird, egal in welche Richtung der Benutzer führt einen Bildlauf in. Wie kann ich nur eine Methode aufrufen, wenn Sie Blättern Sie von Rechts Nach Links?
Hier ist es, wie ich derzeit umgesetzt:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self NextQuestion:scrollView];
}
-(IBAction)NextQuestion:(id)sender
{
CGFloat pageWidth = scrollView.frame.size.width;
int page = floor((scrollView.contentOffset.x - pageWidth) / pageWidth) + 1;
NSInteger npage = 0;
CGRect frame = scrollView.frame;
//Check to see if the question has been answered. Call method from another class.
if([QuestionControl CheckQuestionWasAnswered:page])
{
pageNumber++;
NSLog(@"Proceed");
if(([loadedQuestionnaire count] - 1) != page)
{
[self loadScrollViewWithPage:page - 1];
[self loadScrollViewWithPage:page];
[self loadScrollViewWithPage:page + 1];
}
//update the scroll view to the appropriate page
frame = scrollView.frame;
frame.origin.x = (frame.size.width * page) + frame.size.width;
frame.origin.y = 0;
[self.scrollView scrollRectToVisible:frame animated:YES];
}
//If question has not been answered show a UIAlert with instructions.
else
{
UIAlertView *alertNotAnswered = [[UIAlertView alloc] initWithTitle:@"Question Not Answered"
message:@"You must answer this question to continue the questionnaire."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alertNotAnswered show];
}
}
Code für Lösung 1:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
NSLog(@"%f",scrollView.contentOffset.x);
if (scrollView.contentOffset.x < lastOffset) //has scrolled left..
{
lastOffset = scrollView.contentOffset.x;
[self NextQuestion:scrollView];
}
}
InformationsquelleAutor HGomez90 | 2012-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
In
scrollViewWillBeginDragging
die scroll-view hat sich noch nicht bewegt (oder registrierte Bewegung) und socontentOffset
wird von 0. Ab IOS 5 können Sie stattdessen suchen Sie in der scrollview istpanGestureRecognizer
zu bestimmen, die Richtung und Größe des Benutzers-scrolling-Geste.CGPoint velocity = [scrollView.panGestureRecognizer velocityInView:scrollView.superview];
statt.Beachten Sie außerdem, wenn Sie wechseln ein UIScrollView und berühren Sie dann und halten Sie, während die anzeigen noch Abbremsen, scrollViewWillBeginDragging aufgerufen werden die übersetzung und Geschwindigkeit beide mit x = y = 0. Also besser nicht davon ausgehen, dass
else{…}
wäredragging left
. Überprüfen Sie für die übersetzung/velocity-Werte von null, um sicher zu sein.InformationsquelleAutor mwielbut
Machen
CGFloat lastOffset
alsmember variable
in Ihrem Klasse.h Datei..dann die 0 in
viewDidLoad
.dann schauen Sie in
NSLog scrollView.contentOffset.x vor der if-Anweisung .. sollte es negativ für Links scrollen
Scrollen von Rechts nach Links zeigt scrollview.contentOffset.x
0.000000
. Von Links nach rechts zeigt es bei768.000000
es zeigt keine negative offset .. ? erzählen Sie Ihren slog-Anweisung..
Das sind die Ausgänge von meinem NSLog
InformationsquelleAutor Shubhank
Können Sie ein Start-offset als Mitglied Ihrer Klasse, die Sie speichern, wenn der Delegat erhält den scrollViewDidBeginDragging: Nachricht.
Sobald Sie den Wert vergleichen kann man die x Wert der scroll-view mit der aufgerechnet, die Sie gespeichert haben und zu sehen, ob die Sicht nach Links oder rechts gezogen.
Wenn die Veränderung der Richtung Mitte ziehen ist wichtig, Sie können zurücksetzen, Ihr gegenüber zeigen Sie in der viewDidScroll: delegate-Methode. So eine umfassendere Lösung wäre, speichern die zuletzt erkannte Richtung und die base offset-Punkt, und aktualisieren Sie den Status jedes mal, wenn ein angemessener Abstand gezogen wurde.
Der 'angemessene Abstand' ist alles, was Sie brauchen, um zu verhindern, dass die Laufrichtung zu wechseln zwischen Links und rechts, um leicht, aber über 10 Punkte sollten genug sein.
InformationsquelleAutor Javier C