Quiero mover una vista encima de otra, ¿cómo puedo saber el índice z de la vista y cómo pasar a la parte superior?
UIView
los hermanos se apilan en el orden en que se agregan a su supervista. Los UIView
métodos y propiedades de la jerarquía están ahí para administrar el orden de las vistas. En UIView.h:
@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;
Las vistas entre hermanos se ordenan de atrás hacia adelante en la subviews
matriz. Entonces la vista más alta será:
[parentView.subviews lastObject];
y la vista inferior será:
[parentView.subviews objectAtIndex:0];
Como dijo Kolin Krewinkel, [parentView bringSubviewToFront:view]
llevará la vista a la cima, pero este es solo el caso si las vistas son todas hermanas en la jerarquía.
Puede usar la zPosition
propiedad de la capa de la vista (es un CALayer
objeto) para cambiar el índice z de la vista.
theView.layer.zPosition = 1;
Como agregó Viktor Nordling , "los valores grandes están en la parte superior. Puede usar los valores que desee, incluidos los 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"
zPosition
trabajos?IB y Swift
Dado el diseño fluido en el que el amarillo es la supervista y el rojo, el verde y el azul son subvistas entre hermanos del amarillo,
El objetivo es mover una subvista (digamos verde) a la parte superior.
En Interface Builder
En el Creador de interfaces, todo lo que necesita hacer es arrastrar la vista que desea mostrar en la parte superior al final de la lista en el Esquema de documentos.
Alternativamente, puede seleccionar la vista y luego en el menú ir a Editor> Organizar> Enviar al frente .
En veloz
Hay un par de formas diferentes de hacer esto mediante programación.
Método 1
Este método es el equivalente programático de la respuesta IB anterior.
Solo funciona si las subvistas son hermanos entre sí.
Una matriz de las subvistas está contenida en
yellowView.subviews
. Aquí,bringSubviewToFront
mueve elgreenView
índice0
a2
. Esto se puede observar conMétodo 2
0
para todas las demás vistas, el resultado es quegreenView
parece que está en la parte superior. Sin embargo, todavía permanece en el índice0
de layellowView.subviews
matriz. Sin embargo, esto puede causar algunos resultados inesperados, porque cosas como los eventos de tap todavía irán primero a la vista con el número de índice más alto. Por esa razón, podría ser mejor ir con el Método 1 anterior.zPosition
podría establecer enCGFloat.greatestFiniteMagnitude
(CGFloat(FLT_MAX)
en versiones anteriores de Swift) para garantizar que esté en la parte superior.fuente
fuente
Si desea hacer esto a través del Creador de interfaces de XCode, puede usar las opciones del menú en Editor-> Arreglo. Allí encontrará "Enviar al frente", "Enviar al fondo", etc.
fuente
Dentro de la vista que desea llevar a la cima ... (en forma rápida)
fuente
Si está utilizando cocos2d, puede ver un problema con [parentView bringSubviewToFront: view], al menos no me funcionaba. En lugar de traer la vista que quería al frente, envié las otras vistas y eso funcionó.
fuente
Podemos usar zPosition en ios
si tenemos una vista llamada salonDetailView, por ejemplo:
@IBOutlet weak var salonDetailView: UIView!
En mi caso ver la imagen
y tener UIView para GMSMapView, por ejemplo:
@IBOutlet weak var mapViewUI: GMSMapView!
Para mostrar la vista salonDetailView superior del mapaViewUI
use zPosition como se muestra a continuación
fuente
O usa esto
según aquí
fuente