Pergunta

Eu estou pedindo minha ViewController para ele de propriedade view.center e desenhar um novo UIView que centra-se em torno deste "centro" ... Eu estou começando (160, 250) como resposta. mas quando o novo UIView desenha-lo de abaixo centro ... Então, eu estou querendo saber quem está me dando esta informação e que se relaciona com? Isto é claramente onde o centro da vista é em relação à janela, se você levar em conta o 20px altura da barra de status. que levaria o centro da vista para baixo 10px. mas quando desenho myView parece desenhar em relação ao ViewController.view e não a janela assim parece 20px abaixo do centro ...

Espero que o ViewController para me dar seu centro (160, 230) para que eu pudesse desenhar em seu centro ... eu preciso dar conta manualmente para a barra de status e subtrair 20 a partir da altura de cada vez? ou há alguma tradução vista espaço eu estou com vista? De ViewController.m:

- (void)setUpMyView {
// Create my view

MyView *aView = [[MyView alloc] init];
self.myView = aView;
[aView release];
myView.center = self.view.center;
NSLog(@"CenterX: %f, Y: %f", self.view.center.x, self.view.center.y);
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2);
myView.transform = transform;

[self.view addSubview:myView];

}

console: CenterX: 160.000000, Y: 250.000000

Foi útil?

Solução

Não é "mentir" Na verdade, é o que lhe dá uma resposta em um diferente sistema de coordenadas.

Quando você obter ou definir um centro de vista, ele é calculado em relação à sua pai 's sistema de coordenadas . mãe da self.view é a janela do aplicativo, daí o seu centro é (160, 250), como você imaginou. Mas o pai de myView é self.view, que tem seu próprio sistema de coordenadas local. Neste caso, que sistema de coordenadas é de 20 pixels menor do que a da janela.

O que você quer é encontrar o centro de self.myView em seu sistema de própria coordenadas. Há duas maneiras que você poderia fazê-lo.

1) Você poderia calcular-lo com base na propriedade bounds, que é um CGRect que especifica os limites de uma vista em seu próprio sistema de coordenadas:

myView.center = CGPointMake(self.view.bounds.size.width / 2,
                            self.view.bounds.size.height / 2);

2) Ou você pode usar o método UIView de convertPoint:fromView: para converter as coordenadas da janela é sistema de coordenadas para a de self.view:

// Pass nil as the source view to convert from the window's coordinate system
myView.center = [self.view convertPoint:self.view.center fromView:nil];

Outras dicas

Talvez adicioná-lo à subexibição antes que você pergunte seu centro e tamanho.

MyView *aView = [[MyView alloc] init];
self.myView = aView;
[aView release];
[self.view addSubview:myView]; // add it to the subview first before asking center.
myView.center = self.view.center;
NSLog(@"CenterX: %f, Y: %f", self.view.center.x, self.view.center.y);
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2);
myView.transform = transform;

Eu acho que sei a resposta. Você View Center está correto!

Você esqueceu de acrescentar a barra de status do iPhone é 20px a partir do topo da tela e, portanto, incluído no seu centro de vista. Bingo.

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