Estoy construyendo una grilla de imágenes, y comienzo en la parte superior, creando objetos UIImageView por todas partes. Ahora quiero que se superpongan un poco, pero los últimos que dibujo son los que están más arriba. Me gustaría establecer la posición z programáticamente, para que los primeros que dibuje sean los que estén más arriba.¿Hay alguna manera de establecer algún tipo de índice z para la posición z de los objetos UIImageView?
Respuesta
Dijiste que usaste UIImageView. Dibujar una imagen con UIImageView significa inicializarla y luego agregarla a una vista de contenedor.
¿No puedes simplemente usar este código en tu ciclo?
[containerView insertSubview:image atIndex:[[containerView subviews] count]]
El resultado sería que la vista añade en primer lugar se encuentra en la parte superior de la pila de vista (no he podido probar esto todavía aunque :))
No directamente.
Una solución sería darle a UIViews una propiedad z-index; un número entero que define su nivel de profundidad. Luego podría iterar a través de un NSArray (myArray) que contenga las UIViews y agregarlas como subvistas por orden de profundidad.
En realidad, hasta donde yo sé, no hay una posición de posición z-index para eso. Dibujar en la vista utiliza un modelo de dibujo simple.
Puede poner su lógica en el bucle de dibujo (es decir, dibujar las cosas que desee en último lugar) o puede usar Cocoa Animation, ya que a diferencia de UIImageView, CALayers tiene profundidad (son una proyección 2D de un espacio 3D) Ver here para una referencia.
sí, pensamiento, cada UIImageView es una especie de basa en un CALayer? – Thanks
Sí, ahora que lo pienso, en el iPhone todas las vistas están respaldadas por capas. Cavando un poco, encontré los siguientes métodos en UIImageView documentos: - InsertSubview: aboveSubview: - insertSubview: belowSubview: – Hejazzman
en lugar de utilizar insertSubiew se puede intentar:
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view
Esta técnica funciona bien para una situación en la que está agregando una imagen (u otra vista) programáticamente, y desea llevarla al fondo. En mi caso, tengo algunas etiquetas instaladas en Interface Builder, pero estoy agregando una imagen de fondo estirable en el código. Sin usar sendSubviewToBack :, la imagen de fondo aparece en la parte superior de las etiquetas. –
Es posible que desee considerar el uso de CALayer en lugar de muchos objetos UIImageView. Los objetos UIImageView son geniales, pero para el dibujo intenso los CALayer son más livianos y más eficientes (aunque si necesitas que un usuario interactúe con las imágenes, un objeto de vista es mejor). Realmente depende de lo que estás haciendo. CALayers tienen una propiedad zPosition. Esto es lo que usa UIKit cuando organiza la posición de UIView en la pila de vistas.
Tuve el mismo problema. Necesitaba el elemento de subvista con el índice z más alto y más bajo. De mis pruebas descubrí que UIKit organiza los elementos en las subvistas-propiedad de acuerdo con su posición z. Si toma [self.scrollview subviews]
por ejemplo. El primer elemento de matriz es la subvista que está en la parte posterior. El elemento de matriz con el índice más alto es la subvista en el frente. Si usa
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view`
la matriz de subvistas se reordenará en consecuencia.
Si tiene que el árbitro la vista por debajo/por encima de lo necesario para añadir el punto de vista secundario se puede utilizar el siguiente
[self.view insertSubview:<#(UIView *)#> belowSubview:<#(UIView *)#>];
[self.view insertSubview:<#(UIView *)#> aboveSubview:<#(UIView *)#>];
imageView.layer.zPosition = 100;
https://stackoverflow.com/a/4631895/2482283
Puede utilizar la propiedad zPosition de la la capa de vista (es un objeto CALayer) para cambiar el índice z de la vista.
theView.layer.zPosition = 1;
Como añadió Viktor Nordling, "valores grandes están en la parte superior. Se puede utilizar cualquier valor que desee, incluyendo valores negativos." El valor predeterminado es 0.
Debe importar el marco QuartzCore para acceder a la capa. Simplemente agregue esta línea de código en la parte superior de su archivo de implementación.
#import "QuartzCore/QuartzCore.h"
otra manera (https://stackoverflow.com/a/4663526/2482283), también se puede utilizar UIViews método:
@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;
- 1. Afectando a Z Solicitar UIImageView
- 2. ¿Hay alguna manera de establecer el orden z en la capa de vista de anotación?
- 3. ¿Hay alguna manera de hacer un círculo z-index?
- 4. CSS IE7 índice z
- 5. "Índice Z" en winforms
- 6. CSS: el índice z no funciona correctamente
- 7. revertir z-índice basado de la página para rendir
- 8. Mayor índice z que aparece debajo del índice z más bajo
- 9. Orden de la pila de imágenes (índice z equivalente)
- 10. ¿Hay alguna forma de disparar sobre eventos que ignoran el índice Z?
- 11. Todo sobre .... Z-Index?
- 12. css posicionamiento de los márgenes negativos del índice Z
- 13. Comparar elementos HTML por índice z real
- 14. índice z vs translate3D en Chrome
- 15. Complemento de Firefox para examinar los índices z
- 16. Cómo establecer el orden Z de un control usando WinForms
- 17. ¿Por qué no funciona el índice Z?
- 18. Índice Z y Posicionamiento Relativo/Absoluto
- 19. Cambiar el índice Z del marcador en capas abiertas
- 20. Buscar elemento con índice Z especificado
- 21. ¿Es posible establecer la posición de la imagen de UIImageView?
- 22. IE7/IE8 Problema z-index
- 23. css aparece un índice z más alto en el inferior
- 24. ¿Hay un hack Swing para consultar o establecer el orden Z de una ventana?
- 25. Z-index en Internet Explorer no funciona
- 26. iPad Safari mobile parece ignorar la posición de indexación z para elementos de video html5
- 27. Cómo configurar el índice z usando algunos valores enteros
- 28. Ordenación Z de MKAnnotationViews
- 29. Google Maps, índice Z y menú desplegable de Javascript
- 30. IE8: después de z-index
¿Qué pasaría si todos tienen el mismo índice? – Thanks
Bueno, no pueden, desde que se agrega un índice de att 0 para un ejemplo, derriba a todos los demás en la pila. – ullmark