quadro, limites, centro, origem do UIView, quando usar o quê?
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?
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:
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
.