文章目录
准备
将手势的载体放入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"
}
}