Ich versuche, die folgende Wirkung zu erzielen:UICollectionView für Spring wie Ordner
A UICollectionView
zeigt ein Raster von Zellen für einen übergeordneten Objekttyp, z. G. ein Fotoalbum. Wenn ich auf eines dieser Elemente tippe, möchte ich dieses Element zum oberen Bildschirmrand scrollen und einen Springboard-ähnlichen Ordner daraus öffnen. Innerhalb dieses Ordnerbereichs sollte eine weitere Sammlung angezeigt werden, die aus den Detailelementen besteht, d. e. die einzelnen Fotos dieses Albums. Durch Antippen der verbleibenden "Eltern" -Ansicht wird der Ordner wieder geschlossen. Sehen Sie dieses Schema:
Was ich bisher getan haben, eine regelmäßige Sammlung Ansicht für die Alben ist. Wenn ich eines auswähle, scrollt es zum ausgewählten Element nach oben und verwendet dann JWFolders
, um dort einen leeren Ordner zu öffnen. Sobald das angezeigt wird, trigger ich die umliegenden UINavigationController
, um meine 2. View-Controller mit den Detailelementen zu schieben. Das ist so ausgelegt, dass es dem Benutzer erscheint, als wäre es immer noch die gleiche Ansicht.
Es gibt mehrere Probleme mit diesem Ansatz, und ich würde gerne wissen, wie diese besser zu machen:
JWFolders nimmt einen Screenshot und animierte zwei Hälften davon nach oben/unten, um die Öffnung Wirkung zu erzielen. Das ist in Ordnung, aber ziemlich langsam auf einem iPad3, weil es viele Pixel bewegt und die GPU des iPad3 nicht ganz der Aufgabe gewachsen ist.
Die zweite Ansicht muss pixelgenau sein, damit sie mit der ersten übereinstimmt. Dies wird wahrscheinlich versehentlich unterbrochen.
Ich bin beschränkt, welche Animationen für den View Controller Übergang möglich sind. Der Standard
UINavigationController
's Push von rechts ist nicht passend. Ich überschreibe das, um eine Überblendung zu machen, aber es ist noch lange nicht ideal.
Ich mag würde Zeiger bekommen, wie dieses Problem in einem vertretbaren Weise zu nähern, die viel kreative Hacking erfordert nicht gegen das, was die Rahmenbedingungen ausgelegt sind zu tun. Ich verpasse hier vielleicht etwas Offensichtliches, daher werden Hinweise auf Beispiele oder allgemeine Hinweise geschätzt.
Update:
änderte ich den Ansatz ein bisschen. Jetzt verwende ich einen Containeransicht-Controller, der über zwei eingebettete Auflistungsansicht-Controller verfügt. Einer für das "Album" und einer für den "Fotos" -Teil am unteren Rand. Mit einem UIImageView
in der Mitte zwischen den beiden kann ich das Dreieck nach oben gerichtet bekommen. Dies ist auch unter Wartungsgesichtspunkten schön, weil es die Wartung erleichtert, da die beiden Sammlungen vollständig getrennt behandelt werden.
Die App verwendet automatisches Layout, so dass ich den Platzbedarf jeder der beiden eingebetteten Ansichten ändern kann, indem Sie die Einschränkungen ändern. Dies ist viel schneller als der Screenshot-basierte Ansatz mit JWFolders und funktioniert auch auf einem iPad3.
Diese fast bringt mich dahin, wo ich sein will. Das einzige, was bleibt, ist, die Eröffnungsanimation richtig zu machen. Ich möchte gleichzeitig die Alben-Sammlung scrollen, so dass das angetippte Objekt nach oben geht und die Fotosammlung mit dem Dreieck auf die Album-Zelle erweitert.
Kann ich irgendwie die untere Ansicht mit dieser Zelle über Layoutbeschränkungen verbinden, so dass der Aufruf scrollToItemAtIndexPath:atScrollPosition:animated:
die untere Ansicht öffnet?
Mit welchem Code animieren Sie die Öffnung Ihrer imageViews-Sammlung? – AMayes
Ich habe es gerade nicht zur Hand, aber es ist im Grunde eine Auto-Layout-Einschränkung für den Raum zwischen meinen Ansichten unteren Rand und die Superviews unten von seinem ursprünglichen Wert auf 0 animieren. –
Wenn Sie mit Xcode Instruments vertraut sind, sollten Sie Versuchen Sie Zeit, Ihren Code zu profilieren. Es ist möglich, dass es Orte gibt, an denen Sie JWFolders animieren könnten, da die Animationen nicht so ressourcenintensiv sein sollten. –