Как ограничить максимальную / минимальную шкалу пинча Увеличить в UIPinchGestureRecognizer - PullRequest
0 голосов
/ 24 сентября 2018

Как я могу ограничить масштаб UIPinchGestureRecognizer до минимального и максимального уровня?(не используя UIScrollView) Я хотел бы установить максимальный размер как ширину и высоту изображения.

var pichCenter : CGPoint!
var touchPoint1 : CGPoint!
var touchPoint2 : CGPoint!
let maxScale : CGFloat = 1
var pinchStartImageCenter : CGPoint!

@objc func pinchAction(gesture: UIPinchGestureRecognizer) {

    if gesture.state == UIGestureRecognizerState.began {

        pinchStartImageCenter = imageView.center
        touchPoint1 = gesture.location(ofTouch: 0, in: self.view)
        touchPoint2 = gesture.location(ofTouch: 1, in: self.view)


        pichCenter = CGPoint(x: (touchPoint1.x + touchPoint2.x) / 2, y: (touchPoint1.y + touchPoint2.y) / 2)

    } else if gesture.state == UIGestureRecognizerState.changed {

        var pinchScale :  CGFloat
        if gesture.scale > 1 {
            pinchScale = 1 + gesture.scale/100
        }else{
            pinchScale = gesture.scale
        }
        if pinchScale*self.imageView.frame.width < editPhotoView.frame.width {
            pinchScale = editPhotoView.frame.width/self.imageView.frame.width
        }
        scaleZoomedInOut *= pinchScale

        let newCenter = CGPoint(x: pinchStartImageCenter.x - ((pichCenter.x - pinchStartImageCenter.x) * pinchScale - (pichCenter.x - pinchStartImageCenter.x)),y: pinchStartImageCenter.y - ((pichCenter.y - pinchStartImageCenter.y) * pinchScale - (pichCenter.y - pinchStartImageCenter.y)))
        self.imageView.frame.size = CGSize(width: pinchScale*self.imageView.frame.width, height: pinchScale*self.imageView.frame.height)
        imageView.center = newCenter
    }
}

1 Ответ

0 голосов
/ 24 сентября 2018

Если у вас есть максимальный размер, тогда просто сравните его с максимальным размером и задайте новый размер.

Перед установкой нового кадра проверьте, превышает ли это значение максимальное значение илименьше минимального значения.Если это так, не меняйте рамку.

let newWidth = pinchScale*self.imageView.frame.width
let newHeight = pinchScale*self.imageView.frame.height
// You need to have the maximum and minimum values for comparison already stored
if (newWidth >= minimumWidth && newWidth <= maximumHeight) && (newHeight >= minimumHeight && newHeight <= maximumHeight) {
    imageView.frame.size = CGSize(width: newWidth, height: newHeight)
}

Примечание: Возможно, вы захотите применить ту же логику к другим вещам, которые меняются во время сжатия, например к центру.

...