Wie kann man eine UIImageview "schnippern"?
-
20-08-2019 - |
Frage
Ich habe einige UIViews, die der Benutzer in der Lage sein kann, über den Bildschirm "zu flicken". Sie sind keine Scrollansichten. Sie enthalten einfach ein Rasterbild (PNG). Kann mich jemand auf einen Beispielcode usw. verweisen, um mich zu starten? Etwas mehr schwereres als "Moveme" da draußen, das dazu beiträgt, einen "Flick" (gegen einen "Nudge" oder einen Drag & Drop) zu erkennen und dann die Aussicht in Richtung des "Flicks" abzuräumen?
OpenGL wahrscheinlich Overkill. Wenn möglich, würde ich gerne im Bereich der Kerngrafiken/Animation bleiben.
Lösung
Um die Berührung bei einem View Controller zu erkennen, können Sie die Methoden von TouchesBegan und Touchesended verwenden, die Berührung von TouchesBegan speichern, und wenn sich die Berührung mehr als links oder rechts bewegte, war es ein Streifen, kein Schubs an die links oder rechts.
Andere Tipps
Ich würde sagen, dass die Easyeieist -Art, dies zu implementieren, darin besteht, Ihre Ansichten in einen UiscrollView -Container mit aktiviertem Paging zu versetzen und sich um alle "Flicking" -Aktionen Sorgen zu machen. Funktioniert großartig für mich.
Sie können sogar mit einigen zusätzlichen Anstrengungen faul laden, die Bilder laden.
Ich denke, Sie könnten dies leicht erreichen, indem Sie die Antwort der Nazgul42 und die Zeit zwischen den beiden genannten Ereignissen überprüften. Kurze Zeit und lange Entfernung zusammen konnten dann als Flick interpretiert werden. Sie können auch die Richtung des Streifens bestimmen, indem Sie die Koordinaten beider Berührungsereignispunkte berechnen.
Angenommen, Sie haben eine UIView
genannt aView
und zwei UIImageViews
, page1
und page2
. Angenommen, Sie haben page1
bereits als Unteransicht in aView
, dieser Code wird von Flip von flippen page1
zu page2
:
[UIView beginAnimations:@"someId" context:nil];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:aView cahe:YES];
[page1 removeFromSuperview];
[aView addSubview:page2];
[UIView commitAnimations];
Ich habe hier einen Thread gefunden, obwohl die Methode mich Sorgen macht -
http://discussions.apple.com/message.jspa?messageId=7862186
Es berücksichtigt weder Geschwindigkeit noch Zeitstempel. Nur die Entfernung seit dem letzten Ereignis -Update. Wenn Apple jemals die Frequenz/Granularität von Ereignisaktualisierungen geändert hat, könnte dieser Code brechen.
Versuchen Sie es zu verwenden UIPanGentureRecognizer
Beispielcode :
UIPanGestureRecognizer *imageGesture = [[UIPanGestureRecognizer alloc]
initWithTarget:self
action:@selector(imageDragged:)];
[imageView1 addGestureRecognizer:imageGesture];
dann
- (void)imageDragged:(UIPanGestureRecognizer *)gesture{
UIImageView *imageView = (UIImageView *)gesture.view;
CGPoint translation = [gesture translationInView:imageView];
imageView.center = CGPointMake(imageView.center.x + translation.x,
imageView.center.y + translation.y);
imageView2.center = imageView.center;
imageView3.center = imageView.center;
[gesture setTranslation:CGPointZero inView:imageView];}