Die benutzerdefinierte Animation von "segue" wird nicht beim ersten Tippen auf die Schaltfläche abgespielt

8

Ich bin auf ein ungewöhnliches Verhalten gestoßen, bei dem ich ein wenig hängengeblieben bin, das Problem ist folgendes.

Ich verwende die BWWalkthrough-Bibliothek, um eine 4 Folien als Startbildschirm zu haben. Also habe ich in meinem Appdelegate den folgenden Code, der die Viewcontroller initialisiert:

%Vor%

Alles funktioniert wie vorgesehen, also kein Problem. Auf dem viewController page_three habe ich eine Schaltfläche, die mich mit einer benutzerdefinierten Segue-Animation zu einem anderen View-Controller weiterleitet.

%Vor%

Nun ist das Problem, wenn ich denselben Code auf einem normalen Viewcontroller verwende, funktionieren der Button und die Animation ohne Probleme. Das Problem ist, wenn ich das oben definierte Segment von der letzten Folie meines BWWalkThrough verwende. Das erste Mal, wenn ich die Taste drücke, erscheint der View-Controller, der erscheinen sollte, aber ohne die entsprechende Animation. Nach dem Schließen und erneutem Antippen der Schaltfläche wird die Animation abgespielt, aber es wird ein Fehler zurückgegeben:

  

Darstellen von View-Controllern auf getrennten View-Controllern ist   entmutigt

Wenn ich die Schaltfläche mit der Standardanimation verwende (ohne meinen benutzerdefinierten Animationscode zu verwenden), erhalte ich keinen Fehler und die Standardanimation wird abgespielt.

Ich kann keine Lösung für dieses Problem finden. Ist jemand auf so etwas gestoßen?

    
Netra 30.09.2016, 16:25
quelle

1 Antwort

2

Das Problem liegt hier in der BWWalkthrough-Bibliothek, die einen Scrollview verwendet, um alle Ansichten der verschiedenen ViewControllers, die Sie hinzufügen, darzustellen.

Als solches fügen Sie die Datei "dst.view" am Anfang der Bildlaufansicht (bei Offset-Bildschirmbreite, 0) hinzu, die Sie dann in "Offset" (0,0) umwandeln.

All dies ist außerhalb des Bildschirms, da Sie sich gerade im dritten Bildschirm der Komplettlösung befinden (bei Offset (Bildschirmbreite * 3,0)). Daher können Sie die Animation nicht sehen und den präsentierten View-Controller direkt sehen, wenn das Segment endet.

Um dies zu beheben, fügen Sie Ihre dst.view in der Überleitung zum Superview der scrollview hinzu. d.h. anstelle von src.view.superview?.insertSubview(dst.view, aboveSubview: src.view) schreibe src.view.superview?.superview?.insertSubview(dst.view, aboveSubview: src.view) in das Segment. (Angenommen, Sie verwenden den Übergang nur aus der exemplarischen Vorgehensweise)

Wenn Sie beabsichtigen, das Segment auch an anderen Stellen zu verwenden, können Sie vielleicht eine Typüberprüfung in das Segment einfügen, um zu überprüfen, ob die Superansicht von src.view ein Scrollview ist. Wenn ja, fügen Sie dst.view der Superview von hinzu der Bildlauf.

    
Amit Gupta 09.10.2016, 05:39
quelle