Quero mover uma visualização em cima da outra, como posso saber o índice z da visualização e como passar para o topo?
UIView
os irmãos são empilhados na ordem em que são adicionados à sua superview. Os UIView
métodos e propriedades da hierarquia estão lá para gerenciar a ordem de exibição. No 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;
As visualizações dos irmãos são ordenadas de volta à frente na subviews
matriz. Portanto, a vista superior será:
[parentView.subviews lastObject];
e a vista inferior será:
[parentView.subviews objectAtIndex:0];
Como Kolin Krewinkel disse, [parentView bringSubviewToFront:view]
trará a visão para o topo, mas este é apenas o caso se as visões forem todos irmãos na hierarquia.
Você pode usar a zPosition
propriedade da camada da vista (é um CALayer
objeto) para alterar o índice z da vista.
theView.layer.zPosition = 1;
Como Viktor Nordling acrescentou, "grandes valores estão no topo. Você pode usar qualquer valor que desejar, incluindo valores negativos". O valor padrão é 0.
Você precisa importar a estrutura QuartzCore para acessar a camada. Basta adicionar esta linha de código na parte superior do seu arquivo de implementação.
#import "QuartzCore/QuartzCore.h"
zPosition
obras funcionem?IB e Swift
Dado o layout em que o amarelo é a super visão geral e o vermelho, o verde e o azul são subviews irmãos de amarelo,
o objetivo é mover uma subvisão (digamos verde) para o topo.
No Interface Builder
No Construtor de interface, tudo o que você precisa fazer é arrastar a exibição que você deseja exibir, de cima para baixo na lista, no esquema de documentos.
Como alternativa, você pode selecionar a visualização e, em seguida, no menu, vá para Editor> Organizar> Enviar para frente .
Na Swift
Existem algumas maneiras diferentes de fazer isso programaticamente.
Método 1
Este método é o equivalente programático da resposta do IB acima.
Só funciona se as subvisões forem irmãos um do outro.
Uma matriz das subvisões está contida
yellowView.subviews
. Aqui,bringSubviewToFront
move ogreenView
índice de0
para2
. Isso pode ser observado comMétodo 2
0
para todas as outras visualizações, o resultado é quegreenView
parece que está no topo. No entanto, ele ainda permanece no índice0
dayellowView.subviews
matriz. No entanto, isso pode causar resultados inesperados, porque coisas como eventos de toque ainda irão primeiro para a exibição com o número de índice mais alto. Por esse motivo, talvez seja melhor seguir o método 1 acima.zPosition
poderia ser ajustado paraCGFloat.greatestFiniteMagnitude
(CGFloat(FLT_MAX)
em versões mais antigas do Swift) para garantir que ele está no topo.fonte
fonte
Se você quiser fazer isso através do Interface Builder do XCode, poderá usar as opções de menu em Editor-> Arranjo. Lá você encontrará "Enviar para frente", "Enviar para trás" etc.
fonte
Dentro da visualização que você deseja trazer para o topo ... (em rápido)
fonte
Se você estiver usando o cocos2d, poderá ver um problema com [parentView bringSubviewToFront: view], pelo menos não estava funcionando para mim. Em vez de trazer a vista que eu queria para a frente, eu envio as outras vistas de volta, e isso fez o truque.
fonte
Podemos usar o zPosition no ios
se tivermos uma visualização denominada salonDetailView, por exemplo:
@IBOutlet weak var salonDetailView: UIView!
No meu caso veja a imagem
e tenha o UIView for GMSMapView, por exemplo:
@IBOutlet weak var mapViewUI: GMSMapView!
Para mostrar o View salonDetailView na parte superior do mapViewUI
use zPosition como abaixo
fonte
Ou use isso
conforme aqui
fonte