Координаты CGRect в форме без сетчатки при использовании SetFrame

У меня есть ViewController, к которому я применил форм-фактор сетчатки 3,5 дюйма в раскадровке. Симулятор iOS iPhone 6.1 также имеет настроенную сетчатку.
Когда я пытаюсь расположить UIImageView с помощью SetFrame, его координаты CGRect находятся в не -форма сетчатки (т.е. когда я устанавливаю 320x480, она идет в правый нижний угол, а не в середину экрана):

[myImageView setFrame:CGRectMake(320, 480, myImageView.frame.size.width, myImageView.frame.size.height)];
[self.view addSubview:myImageView];

Как получить координаты CGRect для Retina при использовании SetFrame?
Спасибо.


person Laurent Crivello    schedule 27.07.2013    source источник
comment
Похоже, вы смешиваете положение с размером. Показывает нам код.   -  person Rob van der Veer    schedule 28.07.2013
comment
Отредактированный вопрос с образцом кода по запросу   -  person Laurent Crivello    schedule 28.07.2013


Ответы (2)


Причина этого в том, что iOS использует точки вместо пикселей. Таким образом, один и тот же код будет работать на экране с сетчаткой и без нее. Поэтому, когда вы устанавливаете местоположение в (320 480), вы устанавливаете его в точку (320 480), а не в пиксель (320 480). Таким образом, если телефон не имеет сетчатки, эта точка будет пиксельной (320, 480), а на сетчатке — пиксельной (640 960).

Итак, похоже, что вы хотите:

[myImageView setFrame:CGRectMake(160, 240, myImageView.frame.size.width, myImageView.frame.size.height)];
[self.view addSubview:myImageView];

который поместит верхний левый угол imageView в одно и то же место как на сетчатке, так и на обычном дисплее.

person Jsdodgers    schedule 27.07.2013

Чтобы центрировать вид:

CGFloat x = self.view.frame.size.width;
CGFloat h = self.view.frame.size.height;
[myImageView setCenter:CGPointMake(w/2, h/2)];
...
[self.view addSubview:myImageView];

CGRectMake нужны x,y,width,height. X,y находятся в левом верхнем углу представления, поэтому используйте 0,0,w,h для полнокадровых представлений.

person Rob van der Veer    schedule 27.07.2013