Pergunta

UIView tem a propriedades frame, bounds, center e origin, e todos eles parecem estar inter-relacionados. Na maioria das vezes, eu lidar com frame ao definir a posição eo tamanho de um UIView. Eu entendo que frame está usando sistema de coordenadas global e bounds está usando coordenadas do local exibição (portanto, sua x e y são 0, mas nem sempre), mas ainda é confuso para mim quando usar o quê.

Em que contexto (e qual é o momento certo) as outras propriedades (bounds, center, origin) deve ser usado?

Foi útil?

Solução

A resposta de Marco acima está correto, mas apenas para expandir sobre a questão da "sob o contexto" ...

quadro - esta é a propriedade que utiliza mais frequentemente para aplicações normais do iPhone. a maioria dos controles será colocado para fora em relação ao controle "contendo" para que o frame.origin corresponderá diretamente para onde as necessidades de controle para exibir, e frame.size vai determinar o quão grande para fazer o controle.

Centro - este é o imóvel que você provavelmente vai focar para jogos e animações que podem ocorrer movimento ou descamação do sprite base. Por animação padrão e rotação será baseado no centro do UIView. Ele raramente faz sentido tentar e gerenciar tais objetos pela propriedade quadro.

limites - esta propriedade não é uma propriedade de posicionamento, mas define a área drawable do UIView "parente" para o quadro. Por padrão, esta propriedade é normalmente (0, 0, largura , altura ). Alterar esta propriedade lhe permitirá desenhar fora do quadro ou restringir o desenho para uma área menor dentro do quadro. Uma boa discussão sobre isso pode ser encontrado no link abaixo. É incomum para essa propriedade para ser manipulado a menos que haja necessidade específica para ajustar a região de desenho. A única exceção é que a maioria dos programas irá usar o [[UIScreen mainScreen] bounds] na inicialização para determinar a área visível para a aplicação e configuração sua inicial quadro de UIView em conformidade.

Por que há um retângulo de quadro e um retângulo de limites em um UIView?

Esperemos que esta ajuda a esclarecer as circunstâncias em que cada propriedade pode se acostumar.

Outras dicas

Eles são valores relacionados, e mantidos consistentes por métodos de propriedade intelectual / getter (e utilizando o facto da moldura é um valor puramente sintetizados, não apoiado por uma variável exemplo real).

As principais equações são:

frame.origin = center - bounds.size / 2

(que é a mesma que)

center = frame.origin + bounds.size / 2

(e há também)

frame.size = bounds.size

Isso não é código, equações apenas para expressar a invariante entre as três propriedades. Estas equações também assumem seus vista da transformação é a identidade, o que é por padrão. Se não for, então limites e centro de manter o mesmo significado, mas quadro pode mudar. A menos que você está fazendo rotações não-direito do ângulo, o quadro será sempre o ponto de vista transformado em termos de coordenadas do SuperView.

Este material é tudo explicado em mais detalhes com uma mini-biblioteca útil aqui:

http://bynomial.com/blog/?p=24

O propriedades center, bounds e frame estão interligados: mudando um vai atualizar os outros, portanto, usá-los como quiser. Por exemplo, em vez de modificar os x / params y de frame para recentrar a vista, apenas atualizar a propriedade center.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top