Я делаю 2D-головоломку для iOS, и в настоящее время я пытаюсь реализовать масштабирование и прокрутку с помощью UIPinchGestureRecognizer.
Масштабирование выполняется следующим образом: у меня есть целевой 2D-вектор, который является "точкой масштабирования". Код:
glTranslatef(target.x, target.y, 0);
glScalef(scale, scale, 0);
glTranslatef(-target.x, -target.y, 0);
Цель выбирается с помощью распознавателя жестов следующим образом:
-(void)handlePinchGesture:(UIPinchGestureRecognizer*)recognizer
{
if (UIGestureRecognizerStateBegan == [recognizer state])
{
view->setTarget([recognizer locationInView:self]);
}
// Rest of the code omitted
}
Все работает отлично.
Первоначально игра была разработана для iPAD, но я хочу, чтобы она работала и на iPhone, и на iPOD. Но iPhone и iPOD имеют разные пропорции. Чтобы сохранить начальные пропорции изображения, я решил сделать начальную шкалу Y немного больше. Также это позволило прокручивать игровое поле вверх и вниз с первоначальным коэффициентом масштабирования. Код:
glTranslatef(target.x, target.y, 0);
glScalef(scale, scale * aspectRatio, 0);
glTranslatef(-target.x, -target.y, 0);
Это работает просто отлично, если игровое поле "центрировано" на экране (например, когда в направлениях прокрутки бота (вверх и вниз) есть равное пространство). Но если мы прокручиваем поле вверх или вниз и начинаем жест щепотки, игровое поле снова прыгает в центр.
Я понимаю, что мне нужно перевести позицию жестов на какое-то смещение, но я не могу понять, как именно на 3 дня.