Gibt es eine Möglichkeit, eine Art von z-index für z-Position von UIImageView Objekten der Einstellung?

StackOverflow https://stackoverflow.com/questions/826068

Frage

Ich baue ein Raster von Bildern, und ich an der Spitze beginnen, Erstellen von UIImageView überall Objekte. Jetzt möchte ich, dass sie ein wenig überlappen, aber die letzten, die ich zeichne, sind diejenigen am meisten an der Spitze. Ich mag die z-Position programmatisch setzen, so dass die erste, die ich wird die, die am meisten auf sein ziehen.

War es hilfreich?

Lösung

Sie sagten, Sie UIImageView verwendet. ein Bild mit UIImageView Zugeinrichtung es zu initialisieren und dann in einen Behälter Ansicht hinzugefügt wird.

Können Sie sich diesen Code nicht in der Schleife verwenden?

[containerView insertSubview:image atIndex:[[containerView subviews] count]]

Das Ergebnis wäre, dass der Blick auf dem oberen Rand der Ansicht Stapel zuerst hinzugefügt (ich habe nicht in der Lage gewesen, dies zu testen, doch obwohl :))

Andere Tipps

anstelle von insertSubiew Sie können versuchen:

- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view

https://stackoverflow.com/a/4631895/2482283

Sie können die zPosition verwenden Eigenschaft der Schicht Sicht (es ist ein CALayer Objekt) den Z-Index der Ansicht zu ändern.

theView.layer.zPosition = 1;

Als Viktor Nordling fügte hinzu: „große Werte auf der linken Seite. Sie alle Werte verwenden können, die Sie wollen, einschließlich negativer Werte.“ Der Standardwert ist 0.

Sie müssen den Rahmen Quartz importieren die Ebene zuzugreifen. Fügen Sie einfach diese Codezeile an der Spitze Ihrer Implementierungsdatei.

#import "QuartzCore/QuartzCore.h"

eine andere Art und Weise ( https://stackoverflow.com/a/4663526/2482283 ), können Sie auch UIViews nutzen Methode:

@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;

- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;

- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;

- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;

Nicht direkt.

Eine Lösung wäre die UIViews eine z-index Eigenschaft werden zu geben; eine ganze Zahl Ihrer Tiefenniveaus definieren. Dann könnten Sie eine NSArray (arr) itterate durch die UIViews enthalten sie als Subviews in der Reihenfolge der Tiefe hinzufügen.

Ich hatte das gleiche Problem. I erforderlich, um das subview Element mit dem höchsten und den niedrigsten z-Index. Von meinem Test habe ich herausgefunden, dass UIKit die Elemente in der Subviews-Eigenschaft ordnet nach ihrer z-Position. Wenn du nimmst [self.scrollview subviews] zum Beispiel. Das erste Array-Element ist die Unteransicht, die an den sehr zurück. Das Array-Element mit dem höchsten Index ist die Untersicht auf ganz vorne. Wenn Sie

- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view`

wird die Subviews Array entsprechend neu geordnet werden.

Wenn Sie die ref zu der Ansicht unten / oben, müssen Sie die Untersicht hinzufügen Sie folgende verwenden

[self.view insertSubview:<#(UIView *)#> belowSubview:<#(UIView *)#>];
[self.view insertSubview:<#(UIView *)#> aboveSubview:<#(UIView *)#>];

Eigentlich, soweit ich weiß, gibt es keine z-index Eigenschaft position dafür. in der Ansicht Zeichnung verwendet eine einfache Zeichnung Modell.

Sie können entweder Ihre Logik in der Zeichnung Schleife gesetzt (dh die Dinge, ziehen Sie oben zuletzt wollen) oder können Sie Cocoa-Animation verwenden, da im Gegensatz zu UIImageView, CALayers Tiefe haben (sie eine 2D-Projektion eines 3D-Raum sind) . Siehe hier für eine Referenz.

Sie könnte wirklich wollen CALayer ist statt vieler UIImageView Objekte mit berücksichtigen. UIImageView Objekte sind groß, aber für eine intensive Zeichnung CALayer die sind leichter und effiziente (obwohl, wenn Sie einen Benutzer mit den Bildern interagieren haben müssen, ein View-Objekt ist besser). Es hängt wirklich davon ab, was Sie tun. CALayers tun, um eine zPosition Eigenschaft. Dies ist, was UIKit verwendet, wenn er die UIView Position in der Ansicht Stapel anordnet.

imageView.layer.zPosition = 100;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top