Я делаю 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 дня.