Отредактировано, чтобы лучше объяснить мою проблему
Я пытаюсь выполнить операцию масштабирования, используя мой пользовательский вид (не UIView). Представление имеет перевод, масштабирование, поворот значений. Я использую их следующим образом, между вызовами glPushMatrix () и glPopMatrix ().
- (void)transform
{
glTranslatef(translation.x + anchor.x, translation.y + anchor.y, 0.0f);
//glRotatef(-rotation * 57.2957795f, 0.0f, 0.0f, 1.0f);
glScalef(scale.x, scale.y, 1.0f);
glTranslatef(-anchor.x, -anchor.y, 0.0f);
}
Я пытаюсь выяснить, как мне следует изменить значения привязки и / или перевода, чтобы операция масштабирования относилась к тому, что отображается на экране. В масштабе 1: 1 я могу просто использовать необработанные экранные координаты в качестве привязки и выполнить вышеуказанное преобразование. Но когда представление уже находится в некотором произвольном масштабе / положении, якорь и / или перевод должны учитывать это.
Пока это то, что я понял:
1) Получить смещение от центра шкалы к началу координат в экранных координатах.
2) Масштабируйте это значение, чтобы оно находилось в локальной системе координат представления.
3) Теперь у меня есть новый якорь для масштабирования. Я установил привязку представления к этому значению.
Одного этого недостаточно, кажется. Я думаю, что мне не хватает компонента перевода или другой переменной, которая входит в новую опорную точку. Чего мне не хватает?