常用的手勢(shì)識(shí)別器
let tap : UITapGestureRecognizer //輕拍
let pin : UIPinchGestureRecognizer //捏
let swipe : UISwipeGestureRecognizer //滑動(dòng)
let rotate : UIRotationGestureRecognizer //旋轉(zhuǎn)
let pan : UIPanGestureRecognizer //移動(dòng)
let longpress : UILongPressGestureRecognizer //長(zhǎng)按
輕拍
let tap : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(GameGesture.tap))
self.view?.addGestureRecognizer(tap)
捏
let pin : UIPinchGestureRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(GameGesture.pin(recognizer:)))
self.view?.addGestureRecognizer(pin)
滑動(dòng)
//默認(rèn)是右滑
let swpieRight : UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameGesture.swipe(recognizer:)))
let swpieLeft : UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameGesture.swipe(recognizer:)))
let swpieUp : UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameGesture.swipe(recognizer:)))
let swpieDown : UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameGesture.swipe(recognizer:)))
swpieRight.direction = .right
swpieLeft.direction = .left
swpieUp.direction = .up
swpieDown.direction = .down
self.view?.addGestureRecognizer(swpieRight)
self.view?.addGestureRecognizer(swpieLeft)
self.view?.addGestureRecognizer(swpieUp)
self.view?.addGestureRecognizer(swpieDown)
旋轉(zhuǎn)
let rotate : UIRotationGestureRecognizer = UIRotationGestureRecognizer(target: self, action: #selector(GameGesture.rotate(recognizer:)))
self.view?.addGestureRecognizer(rotate)
移動(dòng)
let pan : UIPanGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(GameGesture.pan(recognizer:)))
self.view?.addGestureRecognizer(pan)
長(zhǎng)按
let longPress : UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(GameGesture.longpress(recognizer:)))
self.view?.addGestureRecognizer(longPress)
初始化
override func didMove(to view: SKView) {
self.size = UIScreen.main.bounds.size
node = SKSpriteNode()
node.name = "gesture"
node.color = UIColor.red
node.size = CGSize(width: 100, height: 100)
node.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
self.addChild(node)
//添加手勢(shì)
....
}
事件方法
@objc func tap() {
node.isHidden = !node.isHidden
}
var lastScale : CGFloat = 0.0
@objc func pin(recognizer : UIPinchGestureRecognizer) {
self.view?.bringSubview(toFront: view!)
if recognizer.state == UIGestureRecognizerState.ended {
lastScale = 1.0 //放手之后比例設(shè)置為1:1
return
}
//上一次的縮放比例 - 當(dāng)前捏縮放比例 = 下一次比例的變化值.
let scale : CGFloat = 1.0 - (lastScale - recognizer.scale)
recognizer.view?.transform = recognizer.view!.transform.scaledBy(x: scale, y: scale)
lastScale = recognizer.scale
}
@objc func rotate(recognizer : UIRotationGestureRecognizer) {
self.node.zRotation = -recognizer.rotation
}
@objc func pan(recognizer : UIPanGestureRecognizer) {
if recognizer.state == UIGestureRecognizerState.changed {
let point = recognizer.location(in: self.view!)
self.node.position = CGPoint(x: point.x, y: point.y)
//這里考慮recognizer 和 node 的坐標(biāo)系Y軸是相反的.
//所以,這里有一個(gè)bug,就是平移的時(shí)候,Y軸的走向是相反的.這個(gè)bug待解決.
}
}
@objc func swipe(recognizer : UISwipeGestureRecognizer) {
switch recognizer.direction {
case .left:
self.node.run(SKAction.moveBy(x: -100, y: 0, duration: 1))
break
case .right:
self.node.run(SKAction.moveBy(x: 100, y: 0, duration: 1))
break
case .up:
self.node.run(SKAction.moveBy(x: 0, y: 100, duration: 1))
break
case .down:
self.node.run(SKAction.moveBy(x: 0, y: -100, duration: 1))
break
default:break;
}
}
@objc func longpress(recognizer : UIRotationGestureRecognizer) {
self.node.color = UIColor.green
}