Existe uma maneira de definir algum tipo de z-index para z-posição dos objetos UIImageView?

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

Pergunta

Eu estou construindo uma grade de imagens, e eu começar no topo, criando UIImageView objetos em todo o lugar. Agora eu quero que eles se sobrepõem um pouco, mas os últimos I atraem são os mais em cima. Eu gostaria de definir o z-posição de programação, de modo que os primeiros I sorteio será os mais no topo.

Foi útil?

Solução

Você disse que você usou UIImageView. Desenhar uma imagem com meios UIImageView inicializando-lo e, em seguida, adicionando-à uma vista do recipiente.

Você não pode apenas usar esse código em seu loop?

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

O resultado seria que a visão adicionada pela primeira vez está no topo da pilha de exibição (eu não tenho sido capaz de testar isso ainda embora :))

Outras dicas

em vez de usar insertSubiew você pode tentar:

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

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

É possível usar a propriedade zPosition de camada da vista (é um objecto CALayer) para alterar o índice z do ponto de 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 o quadro 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"

outra maneira ( https://stackoverflow.com/a/4663526/2482283 ), você também pode 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;

Não diretamente.

Uma solução seria dando os UIViews uma propriedade índice z; um inteiro que define o seu nível de profundidade. Então você poderia itterate através de um NSArray (myArray) contendo os UIViews adicioná-los como subviews a fim de profundidade.

Eu tive o mesmo problema. I necessário o elemento subexibição com o índice z mais alto e mais baixo. Do meu teste eu descobri, que organiza UIKit os elementos no subviews-propriedade de acordo com seu z-position. Se você pegar [self.scrollview subviews] por exemplo. O primeiro elemento da matriz representa a subexibição que está precisamente no verso. O elemento de matriz com o mais alto índice é o subexibição na extrema dianteira. Se você usar

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

a matriz subvisualizações vai ser reordenadas em conformidade.

Se você tiver o árbitro para a exibição abaixo / acima, você precisa adicionar o ponto de vista sub você pode usar o seguinte

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

Na verdade, tanto quanto eu sei, não há nenhuma z-index propriedade position para isso. Desenho na vista utiliza um modelo de desenho simples.

Você pode colocar a sua lógica no circuito de desenho (ou seja, desenhar as coisas que você quer em cima passado) ou você pode usar Cacau Animação, pois ao contrário UIImageView, CALayers tem profundidade (eles são uma projeção 2D de um espaço 3D) . Consulte aqui para uma referência.

Você realmente pode querer considerar o uso de CALayer é em vez de lotes de UIImageView objetos. objetos UIImageView são grandes, mas para intensa desenho do CALayer são mais leves e mais eficientes (embora se você precisa ter uma interação do usuário com as imagens, um objeto de exibição é melhor). Ela realmente depende do que você está fazendo. CALayers têm uma propriedade zPosition. Isto é o que UIKit usa quando se organiza a posição da UIView na pilha de vista.

imageView.layer.zPosition = 100;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top