Welche Art von Inhalten bezieht sich auf den UIViewContentMode-Modus?

8

Laut dem offiziellen Dokument zu UIView über die Eigenschaft contentMode :

%Vor%

Was ist der Inhalt dieser Definition? Ist es eine Unteransicht oder haben wir beispielsweise eine Hintergrundfarbe für eine Ansicht definiert?

Meine allererste Vermutung war, dass es zumindest für die Subviews in einer View gelten sollte, aber das folgende Code-Snippet gibt mir nicht das erwartete Ergebnis, wenn ich mit dem UIViewContentModeCenter -Tag spiele:

%Vor%

Ich habe gerade ein redView eingerichtet, das ein greenView enthalten wird. Ich habe auch den Content-Modus der redview auf UIViewContentModeCenter eingerichtet - warum in dem Code, den ich geschrieben habe, ist die greenView nicht zentriert, wenn ich den Rahmen der Eltern ändern? ist nicht was UIViewContentModeCenter soll tun?

Danke für die Klärung!

Ps: Sie können den obigen Code einfach in loadView eines einfachen View-Controller-Vorlagenprojekts testen.

    
tiguero 10.10.2012, 20:22
quelle

2 Antworten

10
  

Aus der Dokumentation:

     

Der Inhaltsmodus gibt an, wie die zwischengespeicherte Bitmap des Layers der Ansicht ist   wird angepasst, wenn sich die Grenzen der Ansicht ändern.

     

Bei einer Bildansicht handelt es sich um das Bild. Für einen Blick das   Zeichnet seinen Inhalt, es handelt sich um den gezeichneten Inhalt. Es tut   das Layout von Unteransichten nicht beeinflussen.

     

Sie müssen sich die Autorisierungsmasken in den Unteransichten ansehen.   Der Content-Modus ist hier ein Ablenkungsmanöver. Wenn Sie das Layout nicht erreichen können   Sie müssen Autoresizing Masken verwenden, dann müssen Sie implementieren   layoutSubviews und berechnet die Subview-Positionen und Frames   manuell.

aus jrturtons Antwort auf: Ссылка

    
nvrtd frst 28.03.2013, 06:27
quelle
4

Lesen Sie zuerst Inhaltsmodi hier

In Ihrem Beispiel ändern Sie den Rahmen der roten Ansicht. Dies ruft layoutSubviews in der Ansicht auf, die die grüne Ansicht entsprechend den Layout-Einschränkungen oder Autoresierungsmasken neu positioniert. Sie haben keine angegeben. Der Rahmen der grünen Ansicht bleibt also gleich.

Der Inhaltsmodus gibt an, wie der Layer der Ansicht beim Ändern der Größe aktualisiert werden soll. Abhängig vom Content-Modus wird drawRect aufgerufen oder nicht.

Sie können den Effekt der verschiedenen Inhaltsmodi mit dem folgenden Beispiel testen:

Fügen Sie eine UIView-Unterklasse hinzu, die mit dieser drawRect-Implementierung einen Kreis zeichnet:

%Vor%

In der Ansicht Controller erstellen und fügen Sie die Kreisansicht hinzu:

%Vor%

Lasst nun den Rahmen animieren und sehen was passiert:

%Vor%

Ich mache das asynchron, um CoreGraphics zu zwingen, die Ansicht mindestens einmal mit dem Originalrahmen zu zeichnen. Wenn Sie den Inhaltsmodus nicht einstellen, entsteht ein verschwommener Kreis, da er sich ohne Neuzeichnen skaliert. UIViewContentModeCenter sorgt dafür, dass der kleine Kreis in der Mitte bleibt - auch kein Neuzeichnen erforderlich. UIViewContentModeRedraw bewirkt, dass die Ansicht die Ansicht erneut mit dem neuen Rahmen zeichnet. Eigentlich passiert das vor dem Start der Animation.

Beachten Sie, dass der Inhaltsmodus die Zeichenleistung beeinträchtigen kann.

    
Felix 20.10.2012 13:18
quelle