Meu UIViewController é “mentir” sobre o seu estabelecimento no centro
-
21-08-2019 - |
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
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.