transitionFromView: und seltsames Verhalten mit Flip.

8

Ich habe eine Bildwand ( UIScrollView ) und da drin habe ich eine Menge UIImageView's .

Hier ist mein Code:

%Vor%

Und hier ist meine IBAction:

%Vor%

Und wenn ich benutze:

UIViewAnimationOptionTransitionCrossDissolve das ist Effekt NUR auf meinem Bild in ScrollView. Wenn ich in diesem Code UIViewAnimationOptionTransitionFlipFromTop verwende, wirkt sich das auf meine scrollView aus.

Wie ist es möglich?

Natürlich möchte ich meinen Animationseffekt nur für einzelnes Bild verwenden.

    
Kuba 07.08.2012, 14:05
quelle

4 Antworten

10

So funktioniert der Übergang konzeptionell:

  1. Das System rendert den aktuellen Status der übergeordneten Ansicht von fromView in einen Offscreen-Puffer ("before" -Zustand)
  2. Die fromView wird aus ihrer übergeordneten Ansicht entfernt
  3. die toView wird zur parentView hinzugefügt (kann nil sein, du hast recht damit; in diesem Fall wird nichts hinzugefügt)
  4. Das System rendert die übergeordnete Ansicht in einen Offscreen-Puffer ("nach" state ")
  5. Das System animiert den Übergang der übergeordneten Ansicht vom Zustand "before" zum Status "after"

In Ihrem Fall ist die übergeordnete Ansicht die Bildlaufansicht, sodass die gesamte Bildlaufansicht umgestellt wird. Entgegen Ihrer Wahrnehmung ist dies auch bei einer Überblendung der Fall. Es ist nur so, dass die meisten der scrollview (der Teil, der nicht von fromView abgedeckt wird) vorher und nachher identisch ist, also sieht es so aus, als ob dieser Teil nicht am Übergang teilnimmt - tut es aber.

Wenn ich richtig verstanden habe, arrangieren Sie mehrere Stapel von Bildansichten horizontal in Ihrer Bildlaufansicht, und wenn jemand zweimal auf die "oberste" Bildansicht in einem Stapel tippt, wollen Sie das Bild direkt darunter "aufdecken", ohne die anderen Stapel zu beeinflussen.

Wenn Sie der scrollView für jeden dieser Stapel eine Containeransicht mit derselben Größe wie der Stapel hinzufügen und alle ImageViews für diesen Stapel in diese Containeransicht anstatt direkt in die Bildlaufansicht einfügen, funktioniert sie. Wenn Sie auf tippen, machen Sie einfach einen Übergang von der Tapped-Ansicht zu Null, wie Sie es ursprünglich getan haben. Die Größe des Übergangs auf dem Bildschirm wird auf die Containeransicht beschränkt (grob - Curls und Flips verwenden etwas mehr als den Rahmen).

Abhängig von Ihren Anforderungen möchten Sie möglicherweise die Containeransicht des Stapels entfernen, nachdem das letzte Bild im Stapel entfernt wurde.

    
Jörn Eyrich 14.08.2012, 16:25
quelle
2

Der Grund ist, dass UIViewAnimationOptionTransitionFlipFromTop erst seit iOS 5.0 verfügbar ist

Von UIView-Klassenreferenz :

  

UIViewAnimationOptionTransitionFlipFromTop
  Ein Übergang, der eine Ansicht um ihre horizontale Achse von oben nach unten kippt. Die obere Seite der Ansicht bewegt sich nach vorne und die untere Seite nach hinten.
Verfügbar in iOS 5.0 und höher.
  Deklariert in UIView.h. '

In iOS 4.3 kann dies zu unvorhersehbarem Verhalten führen.

    
Nikita Pestrov 16.08.2012 13:48
quelle
0

Zunächst muss ein toView aufgeführt sein, damit transitionFromView korrekt verwendet werden kann.

Hier ist Apples Beispiel , wie es ist fertig:

%Vor%

Ich glaube auch, dass transitionFromView SuperView als Argument annehmen soll.

Ich denke das ist besser, wenn Sie Ihre UImageView zu einer Container-UIView hinzufügen und die Aktion für den Container statt direkt auf der UIImageView ausführen. Da Sie im Wesentlichen eine übergeordnete UIView zum Animieren benötigen, während Sie während der Animation Unteransichten hinzufügen und entfernen.

    
random 07.08.2012 17:36
quelle
-1

Wie Cory sagt, sieht transitionFromView: toView so aus, als ob es eine Zielansicht haben soll. Wenn Sie nur eine Ansicht ausblenden möchten, verwenden Sie eine Methode, die nur für eine einzelne Ansicht verwendet werden soll, z. B. transitionView: duration: options: animations: completion.

Das Beispiel aus der Dokumentation scheint genau das zu tun, was Sie wollen.

%Vor%     
Gordon Dove 14.08.2012 09:00
quelle