Преобразование координат из размера экрана iPhone в размер экрана iPad - PullRequest
2 голосов
/ 26 марта 2012

У меня есть пользовательский UIView, который содержит интерактивный чертеж, который рисуется в функции drawRect вида.На iPad размер рисунка составляет 1024 x 768. Для iPhone я уменьшаю рисунок для iPhone, используя CGContextScaleCTM.Чтобы сохранить правильное соотношение сторон на моих чертежах, я уменьшаю вид до 480 x 360 и устанавливаю значение y для вида -20 (эффективно обрезая 20 пикселей от верха и низа вида, что нормально).Теперь все выглядит правильно, но мне нужно преобразовать сенсорные координаты из iPhone в iPad, чтобы интерактивные части моего обзора работали.Если я сделаю uiview 320 высоким и использую

point.y *=768/320 

для преобразования значения y, то местоположения верны (но мой рисунок искажен), я провел несколько тестов для жесткого кодирования, поэтому я знаю, что это должно работатьно мне трудно заставить математику работать с урожаем.Вот что у меня есть:

CGPoint point = [[touches anyObject] locationInView:self.view];
[self endTouch:&point];
NSLog(@"true point: %@",NSStringFromCGPoint(point));
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
point.x *= 1024/480;
point.y *= 768/360;
NSLog(@"corrected point: %@",NSStringFromCGPoint(point));
}

Кто-нибудь может мне помочь с этим преобразованием?Спасибо!

1 Ответ

3 голосов
/ 26 марта 2012

1024/480 и 768/360 выполняют целочисленное деление. Результат обеих операций - 2, но вы действительно хотите 2.133333. Замените соответствующие строки в вашем коде следующим:

point.x *= 1024.0/480.0;
point.y *= 768.0/360.0;

Это вернет искомое значение и масштабирует значения x и y вашей точки соответственно.

Возможно, вам будет лучше (с точки зрения читабельности) заменить эти литералы макросом #define. Вверху вашего кода поставьте следующее:

#define SCALING_FACTOR_X (1024.0/480.0)
#define SCALING_FACTOR_Y (768.0/360.0)

и затем измените свой код, чтобы использовать это:

point.x *= SCALING_FACTOR_X;
point.y *= SCALING_FACTOR_Y;

Таким образом, будет более понятно, что вы на самом деле делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...