UIGestureRecognizer on UIImageView

前端 未结 8 1117
南旧
南旧 2020-11-28 01:32

I have a UIImageView, which I want to be able to resize and rotate etc.

Can a UIGestureRecognizer be added to the UIImageView?

8条回答
  •  迷失自我
    2020-11-28 02:31

    I just done this with swift4 by adding 3 gestures together in single view

    1. UIPinchGestureRecognizer : Zoom in and zoom out view.
    2. UIRotationGestureRecognizer : Rotate the view.
    3. UIPanGestureRecognizer : Dragging the view.

    Here my sample code

    class ViewController: UIViewController: UIGestureRecognizerDelegate{
          //your image view that outlet from storyboard or xibs file.
         @IBOutlet weak var imgView: UIImageView!
         // declare gesture recognizer
         var panRecognizer: UIPanGestureRecognizer?
         var pinchRecognizer: UIPinchGestureRecognizer?
         var rotateRecognizer: UIRotationGestureRecognizer?
    
         override func viewDidLoad() {
              super.viewDidLoad()
              // Create gesture with target self(viewcontroller) and handler function.  
              self.panRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(recognizer:)))
              self.pinchRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(self.handlePinch(recognizer:)))
              self.rotateRecognizer = UIRotationGestureRecognizer(target: self, action: #selector(self.handleRotate(recognizer:)))
              //delegate gesture with UIGestureRecognizerDelegate
              pinchRecognizer?.delegate = self
              rotateRecognizer?.delegate = self
              panRecognizer?.delegate = self
              // than add gesture to imgView
              self.imgView.addGestureRecognizer(panRecognizer!)
              self.imgView.addGestureRecognizer(pinchRecognizer!)
              self.imgView.addGestureRecognizer(rotateRecognizer!)
         }
    
         // handle UIPanGestureRecognizer 
         @objc func handlePan(recognizer: UIPanGestureRecognizer) {    
              let gview = recognizer.view
              if recognizer.state == .began || recognizer.state == .changed {
                   let translation = recognizer.translation(in: gview?.superview)
                   gview?.center = CGPoint(x: (gview?.center.x)! + translation.x, y: (gview?.center.y)! + translation.y)
                   recognizer.setTranslation(CGPoint.zero, in: gview?.superview)
              }
         }
    
         // handle UIPinchGestureRecognizer 
         @objc func handlePinch(recognizer: UIPinchGestureRecognizer) {
              if recognizer.state == .began || recognizer.state == .changed {
                   recognizer.view?.transform = (recognizer.view?.transform.scaledBy(x: recognizer.scale, y: recognizer.scale))!
                   recognizer.scale = 1.0
             }
         }   
    
         // handle UIRotationGestureRecognizer 
         @objc func handleRotate(recognizer: UIRotationGestureRecognizer) {
              if recognizer.state == .began || recognizer.state == .changed {
                   recognizer.view?.transform = (recognizer.view?.transform.rotated(by: recognizer.rotation))!
                   recognizer.rotation = 0.0
               }
         }
    
         // mark sure you override this function to make gestures work together 
         func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
             return true
         }
    
    }
    

    Any question, just type to comment. thank you

提交回复
热议问题