Вопрос

Я спрашиваю у своего ViewController его свойство view.center и рисую новый UIView, который центрируется вокруг этого «центра»...В ответ я получаю (160, 250).но когда новый UIView рисует, это ниже центр...Вот мне и интересно, кто дает мне эту информацию и к чему она относится?Очевидно, что это центр представления относительно ОКНА, если принять во внимание высоту строки состояния 20 пикселей.что сместит центр изображения на 10 пикселей вниз.но при рисовании myView кажется, что он рисуется относительно ViewController.view, а не окна, поэтому он отображается на 20 пикселей ниже центра...

Я ожидал, что ViewController предоставит мне свой центр (160, 230), чтобы я мог рисовать в его центре... нужно ли мне вручную учитывать строку состояния и каждый раз вычитать 20 из высоты?или я упускаю из виду какой-то перевод пространства просмотра?Из 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];

}

консоль:ЦентрX:160.000000, Ю:250.000000

Это было полезно?

Решение

На самом деле это не «врет», это дает вам ответ в другой системе координат.

Когда вы получаете или устанавливаете центр вида, он рассчитывается относительно своего родительсистема координат. self.viewРодителем является окно приложения, следовательно, его центр равен (160, 250), как вы и предполагали.Но myViewродитель self.view, который имеет свою собственную локальную систему координат.В данном случае эта система координат на 20 пикселей ниже, чем у окна.

Вам нужно найти центр self.myView в своем собственный система координат.Есть два способа сделать это.

1) Вы можете рассчитать это на основе bounds имущество, которое представляет собой CGRect который определяет границы представления в его собственной системе координат:

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

2) Или вы можете использовать UIView's convertPoint:fromView: метод для преобразования координаты из системы координат окна в систему координат 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];

Другие советы

Возможно, добавьте его в подпредставление, прежде чем задавать вопрос о его центре и размере.

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;

Думаю, я знаю ответ.Вы Центр просмотра правы!

Вы забыли добавить, что строка состояния iPhone находится на 20 пикселей ниже верхнего края экрана и, следовательно, включена в центр просмотра.Бинго.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top