Масштабируйте UIImageView по центру между двумя пальцами

Я реализовал масштабирование UIImageView с помощью CGAffineTransformScale. Я бы сосредоточил зум на точке между двумя пальцами.

Мне не удается использовать точку привязки моего UIImageView для центрирования увеличения.

func handlePinchGesture(gesture: UIPinchGestureRecognizer) {

     if(gesture.state == .Began) {

        self.transitionView = UIImageView(image: self.imageView.image)

        if let view = transitionView {
             view.frame = CGRectMake(0, self.topImageViewConstraint.constant, self.imageView.frame.width, self.imageView.frame.height)
             self.view.addSubview(transitionView)
         }

         let locationInView:CGPoint = gesture.locationInView(self.transitionView)
         let locationInSuperview:CGPoint = gesture.locationInView(self.transitionView.superview)

         self.transitionView.layer.anchorPoint = CGPointMake(locationInView.x / self.transitionView.bounds.size.width, locationInView.y / self.transitionView.bounds.size.height)
         self.transitionView.center = locationInSuperview

    }

    if(gesture.state == .Began || gesture.state == .Changed) {

        self.transitionView.transform = CGAffineTransformScale(self.transitionView.transform, gesture.scale, gesture.scale)
        gesture.scale = 1

    }
}

ИЗМЕНИТЬ

Шаг 1, мой взгляд до ущемления:

image1

Шаг 2, когда щипок вызывается перед шкалой

image2

Изображение сдвигается, как только я зажимаю UIImageView (transitionView в моем коде выше). Не понимаю, почему теряю позицию кадра.


person cmii    schedule 02.02.2016    source источник


Ответы (1)


Я добавил смещение моей прокрутки в новую точку привязки. Прекрасно работает!

 let newAnchorPoint:CGPoint = CGPoint(x:locationInView.x , y: locationInView.y+self.scrollView.contentOffset.y)
 self.transitionView.layer.anchorPoint = CGPointMake(newAnchorPoint.x / self.transitionView.bounds.size.width, newAnchorPoint.y / self.transitionView.bounds.size.height)
 self.transitionView.center = CGPointMake(locationInSuperview.x , locationInSuperview.y)
person cmii    schedule 03.02.2016