I am writing a function like the goodnotes pinch gesture and pan gesture.but I don't know how to limit the pan gesture. I am having Pinch gesture I my code so if I zoom my photo it will messy my decide this is my pan code:
@objc func handlePan(sender: UIPanGestureRecognizer) {
sender.maximumNumberOfTouches = 1 // Limit to one finger
switch sender.state {
case .changed:
if parent.active {
if let view = sender.view {
let translation = sender.translation(in: view)
let offsetX = parent.lastoffset.x + translation.x
let offsetY = parent.lastoffset.y + translation.y
let center = CGPoint(x: (view.center.x + offsetX), y: (view.center.y + offsetY))
let center2 = CGPoint(x: sender.location(in: view).x - view.bounds.minX,
y: sender.location(in: view).y - view.bounds.minY)
let RT = CGPoint(x:((center.x / 2) * (parent.scale * 10)) / 10 , y:((center.y / 2) * (parent.scale * 10)) / 10 )
let LT = CGPoint(x:center.x * 2, y:center.y / 2 )
let RD = CGPoint(x:center.x / 2, y:center.y * 2 )
let LD = CGPoint(x:center.x * 2, y:center.y * 2 )
let ORT = CGPoint(x:((view.center.x / 2) * (parent.scale * 10)) / 10 , y:((view.center.y / 2) * (parent.scale * 10)) / 10 )
let OLT = CGPoint(x:view.center.x * 2, y:view.center.y / 2 )
let ORD = CGPoint(x:view.center.x / 2, y:view.center.y * 2 )
let OLD = CGPoint(x:view.center.x * 2, y:view.center.y * 2 )
if RT.x > (ORT.x + 10) && RT.y > (ORT.y + 10) {
print("ok")
parent.offset = parent.lastoffset
}
}
}
case .ended:
withAnimation(.easeInOut(duration: 0.35)) {
parent.lastoffset = parent.offset
}
default:
break
}
}
I try compare the four corners of the picture I moved with the four corners of the screen but the scale will messy it so I multiplication the scale but it is not working that way.