Swift 七种手势

准备

将手势的载体放入ViewController

@IBOutlet weak var TapLabel: UILabel!
@IBOutlet weak var PinchLabel: UILabel!
@IBOutlet weak var RotationLabel: UILabel!
@IBOutlet weak var SwipeLabel: UILabel!
@IBOutlet weak var PanLabel: UILabel!
@IBOutlet weak var ScreenEdgePanLabel: UILabel!
@IBOutlet weak var LongPressLabel: UILabel!
    

设置Label允许有手势的交互
在这里插入图片描述

若为纯代码则添加下列语句

TapLabel.isUserInteractionEnabled = true

七种手势

Tap 轻点

override func viewDidLoad() {
    super.viewDidLoad()
    let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(tap:)))
        //为tap添加更多的方法
//        tap.addTarget(self, action: <#T##Selector#>)
    TapLabel.addGestureRecognizer(tap)
}
@objc func handleTap(tap: UITapGestureRecognizer) {
    if tap.state == .ended {
        TapLabel.text = "success2"
    }
}

Pinch 捏合

override func viewDidLoad() {
    super.viewDidLoad()
    let pinch = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch(pinch:)))
  
    PinchLabel.addGestureRecognizer(pinch)
}
@objc func handlePinch(pinch: UIPinchGestureRecognizer) {
    if pinch.state == .began || pinch.state == .changed {
        PinchLabel.transform = PinchLabel.transform.scaledBy(x: pinch.scale, y: pinch.scale)
        pinch.scale = 1
//            pinch.velocity 缩放速度 放大为正
    }
}

Rotation 旋转

override func viewDidLoad() {
    super.viewDidLoad()
    let rotation = UIRotationGestureRecognizer(target: self, action: #selector(handleRotation(rotation:)))

    RotationLabel.addGestureRecognizer(rotation)
}
@objc func handleRotation(rotation: UIRotationGestureRecognizer) {
    if rotation.state == .began || rotation.state == .changed {
        RotationLabel.transform = RotationLabel.transform.rotated(by: rotation.rotation)
        rotation.rotation = 0.0
        
//            rotation.velocity 旋转速度 顺时针为正
    }
}

Swipe 轻扫

override func viewDidLoad() {
    super.viewDidLoad()
    let swipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(swipe:)))
    //        swipe.direction 设置方向

    SwipeLabel.addGestureRecognizer(swipe)
}
@objc func handleSwipe(swipe: UISwipeGestureRecognizer) {
    if swipe.state == .ended {
        SwipeLabel.text = "success"
    }
}

Pan 平移拖拽

override func viewDidLoad() {
    super.viewDidLoad()
    let pan = UIPanGestureRecognizer(target: self, action: #selector(handlePan(pan:)))

    PanLabel.addGestureRecognizer(pan)

}
var startCenter = CGPoint.zero
@objc func handlePan(pan: UIPanGestureRecognizer) {
    let translation = pan.translation(in: PanLabel.superview)
    
//        pan.setTranslation(<#T##translation: CGPoint##CGPoint#>, in: <#T##UIView?#>)设置手指在某个View中的偏移量
//        pan.velocity(in: <#T##UIView?#>)平移速度
    if pan.state == .began {
        startCenter = PanLabel.center
    }
    if pan.state != .cancelled {
        PanLabel.center = CGPoint(x: startCenter.x + translation.x, y: startCenter.y + translation.y)
    }

}

ScreenEdgePan 屏幕边缘平移

override func viewDidLoad() {
    super.viewDidLoad()
    let screenEdgePan = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handleScreenEdgePan(screenEdgePan:)))
    screenEdgePan.edges = .left //设置屏幕的位置

    view.addGestureRecognizer(screenEdgePan)
}

@objc func handleScreenEdgePan(screenEdgePan: UIScreenEdgePanGestureRecognizer) {
    let x = screenEdgePan.translation(in: view).x
    
    if screenEdgePan.state == .began || screenEdgePan.state == .changed {
        ScreenEdgePanLabel.transform = CGAffineTransform(translationX: x, y: 0)
    }else{
        UIView.animate(withDuration: 0.3) {
            self.ScreenEdgePanLabel.transform = .identity
        }
    }
}

LongPress长按

    override func viewDidLoad() {
        super.viewDidLoad()
        let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(longPress:)))
//        longPress.numberOfTapsRequired 长按之前要轻点几下

        LongPressLabel.addGestureRecognizer(longPress)

    }
@objc func handleLongPress(longPress: UILongPressGestureRecognizer) {
    if longPress.state == .began {
        view.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
    }
}

直接将手势拖到ViewController的添加手势的方法

1.将手势拖到想要放的载体上
在这里插入图片描述
2.将手势拖到ViewController里面

@IBAction func handleIBTap(_ IBTap: UITapGestureRecognizer) {
    guard let IBTapLabel = IBTap.view as? UILabel else {return}
    if IBTap.state == .ended {
        IBTapLabel.text = "success1"
    }
}

发布了19 篇原创文章 · 获赞 8 · 访问量 1442

猜你喜欢

转载自blog.csdn.net/qq_44864362/article/details/104237613