iOS — сведение пальцев для увеличения — с помощью CGAffineTransform — до точки

У меня есть UIViewController, который вызывает класс UIView, и я использую CGAffine Transform для увеличения экземпляра класса UIView, используя следующий код

CGAffineTransform transform = CGAffineTransformMakeScale(recognizer.scale,    recognizer.scale);
NSLog(@"Pinch scale: %f", recognizer.scale);
float scale = recognizer.scale;
float SCALE_MIN = 1.0f;
float SCALE_MAX = 3.0f;
. . . 

Этот базовый код работает! (некоторый код был опущен)

Теперь проблема заключается в том, что независимо от того, где на экране я «сжимаю», файл всегда увеличивается с середины файла, а не с того места, где я сжимаю . .

Любые предложения о том, как я могу заставить его увеличить точное местоположение?


person Taskinul Haque    schedule 03.07.2013    source источник
comment
для тех, кто заинтересован Нашел отличное решение для плавного масштабирования: @Paul Solts Ответ - stackoverflow.com/questions/5150642/ Также аналогичная ветка обсуждения: stackoverflow.com/questions/4947148/   -  person Taskinul Haque    schedule 22.08.2013


Ответы (2)


Метод locationInView:, доступный для всех UIGestureRecognizers, при вызове экземпляра UIPinchGestureRecognizer даст вам среднюю точку между двумя касаниями, составляющими щипок. Это самое близкое, что, я думаю, вы получите к "точному местоположению".

Когда жест будет впервые распознан, сохраните locationInView, чтобы получить точку, которую вы хотите увеличить. Я бы не стал пытаться обновлять центр масштабирования во время щипка, потому что я думаю, что вы получите сложную реализацию, которая не работает интуитивно. Вы хотите, чтобы масштабирование сохраняло эту центральную точку фиксированной, и вы сможете сделать это, установив anchorPoint из layer вида, который вы трансформируете. Обратите внимание, что координаты anchorPoint нормализованы --- по умолчанию это (0.5, 0.5), центр вида.

person Aaron Golden    schedule 03.07.2013
comment
Спасибо за ваш подробный ответ, можете ли вы привести пример того, как изменить точку привязки? - person Taskinul Haque; 19.08.2013

надеюсь, что это будет полезно для вас, это работает для меня как шарм...

- (void)pinchDetected:(UIPinchGestureRecognizer *)pinchRecognizer
{
    CGAffineTransform transform = CGAffineTransformScale(pinchRecognizer.view.transform, pinchRecognizer.scale,pinchRecognizer.scale);
    _designImage.transform = transform;
    _Zoomscale = pinchRecognizer.scale;

    NSLog(@"image Pinch scale: %2ff", _Zoomscale);
}
person Ashok Kumar    schedule 11.07.2014