Wie auf-und Zuklappen NSSplitView Untersichten mit animation?
Ist es möglich zu animieren, die das kollabieren und expandieren von NSSplitView Untersichten? (Ich bin mir bewusst, die Verfügbarkeit von alternativen, würde aber lieber mit NSSplitView, die über die Animationen.)
Ich bin mit der Methode - (void)setPosition:(CGFloat)position ofDividerAtIndex:(NSInteger)dividerIndex
zu führen, die das kollabieren und expandieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach einigen weiteren versuchen, habe ich die Antwort gefunden: ja, es ist möglich.
Den code unten zeigt, wie es getan werden kann. Die
splitView
ist die NSSplitView ist vertikal unterteilt inmainView
(Links) und derinspectorView
(rechts). DieinspectorView
ist die eine, die zusammenbricht.NSViewAnimation
Instanzen sind undicht.Hier ist eine einfachere Methode:
http://www.cocoabuilder.com/archive/cocoa/304317-animating-nssplitpane-position.html
(Link oben tot, neuer link hier.)
Was sagt eine Kategorie erstellen, auf NSSplitView wie folgt, und animieren Sie dann mit
Funktioniert für mich.
Kategorie:
Aus irgendeinem Grund keine der Methoden der Animation frames gearbeitet für mein scrollview.
Ich landete erstellen einer benutzerdefinierten animation animieren Sie die position der Trennlinie. Dies endete in weniger Zeit als ich erwartet hatte. Wenn jemand interessiert ist, hier ist meine Lösung:
Animation .h:
Animation .m
Ich verwende es auch so - ich habe ein 3-Fenster Ansicht splitter, und ziehe den rechten Bereich ein - /durch einen festen Betrag (235).
Gibt es eine Reihe von Antworten für diese. Im Jahr 2019, der beste Weg, dies zu tun ist die Festlegung von constraints, die auf Ihrem SplitView Scheiben, dann animieren Sie die Einschränkungen.
Angenommen ich habe eine
SplitView
mit drei Scheiben:leftPane
,middlePane
,rightPane
. Ich will nicht einfach nur Zusammenbruch der beiden Bereiche auf der Seite, ich will auch wollen, dynamisch ändern Sie die Breite von verschiedenen Bereichen, wenn bestimmte Ansichten kommen in oder ausgehen.In IB, ich habe ein BREITE Einschränkung für jeden der drei Bereiche.
leftPane
undrightPane
breiten set an250
mit einer Priorität von1000 (required)
.In code sieht es so aus:
Können Sie mehr komplexe in dieser animation block. Zum Beispiel könnten Sie entscheiden, dass Sie möchten, reduzieren Sie den richtigen Bereich, sondern auch vergrößern die Mitte einer auf 500 Pixel an der gleichen Zeit.
Der Vorteil dieses Ansatzes gegenüber den anderen hier aufgeführten ist, dass Sie automatisch verarbeitet Fällen, in denen der Blendrahmen ist derzeit nicht groß genug, um Platz für "ausbau" auf einen ausgeblendeten Bereich. Plus, Sie können diese ändern, um die Scheiben' Größen in IRGENDEINER Weise, nicht nur auf-und Zuklappen Sie. Sie können auch alle diese änderungen passieren auf einmal in eine glatte, kombiniert animation.
Hinweise:
leftPane
,middlePane
, undrightPane
nie ändern. Diese sind "Container", zu dem Sie hinzufügen/entfernen andere Ansichten als nötig. Wenn Sie entfernen den Bereich Aussicht von der SplitView, werden Sie zerstören die Einschränkungen, die du in IB.-setPosition:ofDividerAtIndex:
Ansatz funktioniert nicht gut, wenn der splitView ist nicht groß genug, um den Teiler eingestellt, wo Sie es haben wollen. Zum Beispiel, wenn Sie wollen UN-Zusammenbruch einer rechten Seite und geben Sie500
Breite, aber das ganze Fenster ist derzeit nur300
breit. Dies bekommt auch chaotisch, wenn Sie müssen, um die Größe mehrerer Scheiben auf einmal.min
undmax
Breite Einschränkung wie nötig (vielleicht, wenn die unterschiedlichen Ansichten kommen in jeden Bereich, usw.).KRITISCHER HINWEIS:
Dieser Ansatz schlägt fehl, wenn eine Untersicht in einem der Bereiche hat ein
width
oderminimumWidth
Einschränkung der Priorität von1000
. Sie erhalten eine "kann nicht befriedigen Einschränkungen" - Hinweis in der log. Sie müssen sicherstellen, dass Ihre Untersichten (und Ihre untergeordneten Ansichten, ganz unten in der Hierarchie) nicht über eine Breite Einschränkung bei1000
Priorität. Verwenden Sie die 999 oder weniger für solche Einschränkungen, so dass die splitView können immer überschreiben Sie zum ausblenden der anzeigen.Lösung für macOS 10.11.
Wichtigsten Punkte:
NSSplitViewItem.minimumThickness
hängt vonNSSplitViewItem .viewController.view
Breite/Höhe, wenn nicht explizit gesetzt.NSSplitViewItem .viewController.view
Breite/Höhe richtet sich explizit Einschränkungen verbunden.NSSplitViewItem
(d.h. geordnet UntersichtNSSplitView
) werden vollständig zusammengebrochen, wenn Sie es erreichen könnenZero
dimension (Breite oder Höhe).So, wir brauchen nur zu deaktivieren, entsprechende Einschränkungen vor animation und erlauben Aussicht zu erreichen
Zero
dimension. Nach der animation, wir brauchen nur zu aktivieren, benötigt Einschränkungen.