2009-06-25 14 views
3

Ich habe einige UIViews, die ich möchte, dass der Benutzer über den Bildschirm "streichen" kann. Sie sind keine Scroll-Ansichten. Sie enthalten einfach ein Rasterbild (png). Kann mir jemand auf einen Beispielcode hinweisen, um mir zu helfen? Etwas etwas Schwergewichtiger als "MoveMe" da draußen, das hilft, einen "Flick" (gegen einen "Nudge" oder einen Drag & Drop) zu erkennen und dann den Blick in die Richtung des "Flick" zu verschieben?Wie kann man ein UIImageView "streichen"?

OpenGL wahrscheinlich Overkill. Wenn möglich, würde ich gerne im Bereich Core Graphics/Animation bleiben.

Antwort

0

die Berührung erkennen, in einem View-Controller, können Sie die touchesBegan verwenden und touchesEnded Methoden, speichern Sie die Berührung von touchesBegan, und wenn die Berührung mehr als eine bestimmte Menge nach links oder rechts verschoben wurde, war es ein Streifen, kein Stupsen nach links oder rechts.

+0

ja, aber das würde einen drag nicht unbedingt von einem flick unterscheiden. vielleicht hätte ich genauer sein sollen. jemand, der "etwas aufhebt" und "fallen lässt" muss anders gehandhabt werden als jemand, der es "umwirft". – Meltemi

+0

Was ist der Unterschied zwischen einem "etwas abholen" und "fallen lassen"? – InFreefall

+0

Stellen Sie sich eine Münze auf Ihrem Schreibtisch vor. Sie könnten es aufheben und es in eine Schüssel geben oder Sie könnten es an einen anderen Teil Ihres Schreibtisches "streichen". du beschleunigst es mit der flick und dann "gravity" & "friktion" bringst es zur ruhe ... – Meltemi

0

Angenommen, Sie haben ein UIViewaView und zwei UIImageViews, page1 und page2 genannt. Angenommen, Sie page1 bereits als Subview in aView haben, drehen Sie diesen Code page1-page2:

[UIView beginAnimations:@"someId" context:nil]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:aView cahe:YES]; 
[page1 removeFromSuperview]; 
[aView addSubview:page2]; 
[UIView commitAnimations]; 
+0

Ich bin nicht zwischen "Seiten" pro sagen Übergang. Mehr als wenn man versucht, Bilder von einer Seite des Bildschirms auf die andere zu werfen. – Meltemi

2

Ich würde sagen, dass die einfachste Möglichkeit, dies zu implementieren wäre, Ihre Ansichten in einen UIScrollView-Container mit aktiviertem Paging zu stellen und sich um alle "Flicking" -Aktionen kümmern zu müssen. Funktioniert großartig für mich.

Sie können sogar mit etwas mehr Aufwand haben Ansichten faul laden die Bilder.

+0

Aber ich will keinen Scroll-Effekt. Ich möchte, dass die Objekte in den Grenzen des Bildschirms bleiben. Ich möchte nur eine kurze Geste, um sie von einer Seite des Bildschirms auf die andere zu senden. so würde der Streifen sie in Bewegung setzen und dann würden "Schwerkraft" und "Reibung" sie verlangsamen ... – Meltemi

+0

Dies war die perfekte Lösung in meinem Fall, da ich nur linke oder rechte Bewegung für einen Swipe brauchte, um den Effekt zu verwerfen. – Elise

1

Ich denke, Sie könnten dies leicht erreichen, indem Sie die Antwort nazgul42 nehmen und auch die Zeit zwischen den beiden erwähnten Ereignissen überprüfen. Kurzzeit- und Langstrecken kombiniert könnten dann als Flick interpretiert werden. Sie können auch die Richtung des Streifens bestimmen, indem Sie die Koordinaten berechnen, die beide Berührungspunkte berühren.

0

Ich fand einen Thread hier, obwohl das Verfahren mir Sorgen -

http://discussions.apple.com/message.jspa?messageID=7862186

Es dauert nicht Geschwindigkeit oder Zeitstempel zu berücksichtigen; nur die Entfernung seit dem letzten Ereignisupdate. Wenn Apple jemals die Häufigkeit/Granularität von Ereignisaktualisierungen geändert hat, könnte dieser Code beschädigt werden.

0

try UIPanGentureRecognizer Beispielcode verwenden:

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];} 
Verwandte Themen