I think this code works for you. I declared two kinds of firstView and secondView and added a separate gesture for both views, for example, if in the case of panGesture, for example:
firstPan = UIPanGestureRecognizer(target: self, action: #selector(self.handlePanGesture(gesture:))) secondPan = UIPanGestureRecognizer(target: self, action: #selector(self.handlePanGesture(gesture:))) firstView.addGestureRecognizer(secondPan!) secondView.addGestureRecognizer(firstPan!)
for pinch and rotation, I used the same method as above to add gestures. and for your case you need to have a slit and rotation gesture, except that the simultaneous view gesture works simultaneously for both views, so just check which view and apply the transform to another view.
@objc func handlePinchGesture(_ gestureRecognizer: UIPinchGestureRecognizer) { guard gestureRecognizer.view != nil else { return } if gestureRecognizer.state == .began || gestureRecognizer.state == .changed { if gestureRecognizer.view == firstView { gestureRecognizer.view?.transform = (gestureRecognizer.view?.transform.scaledBy(x: gestureRecognizer.scale, y: gestureRecognizer.scale))! secondView.transform = (secondView.transform.scaledBy(x: gestureRecognizer.scale, y: gestureRecognizer.scale)) gestureRecognizer.scale = 1.0 }else{ gestureRecognizer.view?.transform = (gestureRecognizer.view?.transform.scaledBy(x: gestureRecognizer.scale, y: gestureRecognizer.scale))! firstView.transform = (firstView.transform.scaledBy(x: gestureRecognizer.scale, y: gestureRecognizer.scale)) gestureRecognizer.scale = 1.0 } } } @objc func handleRotationGesture(gesture: UIRotationGestureRecognizer) { if gesture.state == UIGestureRecognizerState.began || gesture.state == UIGestureRecognizerState.changed{ if gesture.view == firstView { gesture.view?.transform = (gesture.view?.transform)!.rotated(by: gesture.rotation) secondView.transform = (secondView.transform).rotated(by: gesture.rotation) gesture.rotation = 0 }else{ gesture.view?.transform = (gesture.view?.transform)!.rotated(by: gesture.rotation) firstView.transform = (firstView.transform).rotated(by: gesture.rotation) gesture.rotation = 0 } } } @objc func handlePanGesture(gesture: UIPanGestureRecognizer) { if gesture.state == UIGestureRecognizerState.began || gesture.state == UIGestureRecognizerState.changed{ let translation = gesture.translation(in: view) gesture.view?.transform = (gesture.view?.transform)!.translatedBy(x: translation.x, y: translation.y) gesture.setTranslation(CGPoint(x: 0, y: 0), in: view) } }
Shezad
source share