Respostas:
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 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 .
Existem algumas maneiras diferentes de fazer isso programaticamente.
Método 1
yellowView.bringSubviewToFront(greenView)
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 o greenView
índice de 0
para 2
. Isso pode ser observado com
print(yellowView.subviews.indexOf(greenView))
Método 2
greenView.layer.zPosition = 1
0
para todas as outras visualizações, o resultado é que greenView
parece que está no topo. No entanto, ele ainda permanece no índice 0
da yellowView.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 para CGFloat.greatestFiniteMagnitude
( CGFloat(FLT_MAX)
em versões mais antigas do Swift) para garantir que ele está no topo.[parentView bringSubviewToFront:view] ;
Dentro da visualização que você deseja trazer para o topo ... (em rápido)
superview?.bringSubviewToFront(self)
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.
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
Podemos usar o zPosition no ios
se tivermos uma visualização denominada salonDetailView,
por exemplo:@IBOutlet weak var salonDetailView: UIView!
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
salonDetailView.layer.zPosition = 1