have pinch gesture and pan gesture, how can I limit the pan gesture

42 Views Asked by At

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.

0

There are 0 best solutions below