Wie präsentiere ich einen UIViewController durch Zoomen?

9

In meiner iPad App habe ich einen View-Controller mit einer kleinen Tabellenansicht. Wenn Sie auf die Tabellenansicht tippen, wird ein Modal View-Controller geöffnet, der eine größere und verfeinerte Version der kleinen Tabellenansicht darstellt. Ich möchte eine Animation aus einem vorgerenderten Bild des Großansicht-Controllers erstellen, indem ich das Bild auf die Größe der kleinen Tabellenansicht skaliere und es auf die volle Bildschirmgröße zoome und dann das Bild durch die "echte" Ansicht ersetze Controller.

Etwas wie:

%Vor%

Ich weiß, dass Sie ein Bild aus einer Ansicht erzeugen können:

%Vor%

Aber wie kann ich den View-Controller selbst zeichnen lassen (außerhalb des Bildschirms), damit ich ihn betrachten und das Bild in einer Animation skalieren kann, um den Bildschirm auszufüllen?

Vielen Dank im Voraus.

    
Påhl Melin 07.10.2011, 08:41
quelle

3 Antworten

3

Ich nehme an, Sie möchten Ihre eigene Animation erstellen. Letzten Monat habe ich mit so etwas herumgespielt. Meine Lösung bestand darin, eine benutzerdefinierte Ansicht (möglicherweise von einem Ansichtscontroller) als Overlay zur aktuellen Ansicht hinzuzufügen. Dies funktioniert auch mit Ebenen.

Zuerst holen Sie das Bild von Ihrem "zukünftigen" oder "gegenwärtigen" View-Controller, wie Sie es oben in Ihrem Codebeispiel getan haben. Normalerweise sollte der Inhalt des View-Controllers beim Rendern im Kontext verfügbar sein.

Jetzt haben Sie das Bild. Die Manipulation des Bildes muss von Ihnen vorgenommen werden.

Fügen Sie das Bild zu einer UIImageView hinzu. Diese ImageView kann als Unteransicht oder Ebene hinzugefügt werden. Jetzt haben Sie eine Ebene, in der Sie über Ihrer eigentlichen Benutzeroberfläche frei zeichnen können. Manchmal müssen Sie die Ebene oder Ansicht verschieben, so dass sie Ihre Ansicht perfekt überlagert. Dies hängt von der Konfiguration Ihrer Ansicht ab. Wenn Sie mit Tableviews arbeiten, ist das Hinzufügen einer Unteransicht nicht so einfach. Also besser die Ebene verwenden.

Nachdem alle Arbeit erledigt ist, präsentieren Sie den neuen View-Controller ohne Animation, so dass er sofort erscheint.

Entfernen Sie die Ebene oder Ansicht aus der übergeordneten Ansicht, nachdem die Arbeit erledigt wurde, und bereinigen Sie.

Das klingt kompliziert, aber sobald Sie das getan haben, haben Sie eine Vorlage dafür. In "WWDC 2011, Session 309 Einführung in das Interface Builder Storyboarding" führte Apple "benutzerdefinierte Segmente" ein, in denen Sie einen Mechanismus für genau das finden, was Sie tun möchten. Der Code unten ist ein Ausschnitt aus einem älteren Projekt und ist irgendwie unordentlich und muss aufgeräumt werden. Aber um das Prinzip zu zeigen, sollte das funktionieren:

%Vor%     
JackPearse 26.10.2011, 10:15
quelle
0

Vielleicht könnten Sie etwas wie

verwenden %Vor%

um eine verkleinerte Version der Ansicht in den übergeordneten View-Controller einzubetten, lvc modal darzustellen und die Skalierung wiederherzustellen, wenn der Benutzer auf die Ansicht klickt.

    
jbat100 07.10.2011 09:04
quelle
0

UIKit erledigt das meiste für Sie. Obwohl die Lösung von jbat100 auch funktionieren könnte, sollten Sie dies einfach tun, indem Sie lvc 's ursprünglichen Frame auf das kleinere Rect setzen, mit dem Sie beginnen möchten, und dann, wenn Sie den Frame auf seine volle Größe einstellen implizite Animation zum Ändern des Frames übernimmt die Zoom-Animation für Sie. Jeder UIView hat einen CALayer, in den der Inhalt eingezeichnet ist, und dieser Layer verfügt über mehrere implizite Animationen, die für die animierten Änderungen an bestimmten Eigenschaften wie den Rahmen- oder Positionseigenschaften eingerichtet wurden. Hier ist mein ungeprüfter Stich:

%Vor%

Der Aufruf performSelector:withObject:afterDelay bewirkt, dass setFrameToFullScreen beim nächsten Laufzyklus aufgerufen wird. Wenn Sie so etwas nicht machen, wird nur der letzte Frame verwendet und das System erkennt die Änderung im Frame nicht und wendet seine implizite Animation auf den Views-Layer an.

    
Logachu 08.10.2011 06:27
quelle

Tags und Links