UISwipeGestureRecognizermemiliki directionproperti yang memiliki definisi berikut:
var direction: UISwipeGestureRecognizerDirection
Arah gesek yang diizinkan untuk pengenal isyarat ini.
Masalah dengan Swift 3.0.1 (dan di bawah) adalah bahwa meskipun UISwipeGestureRecognizerDirectionsesuai OptionSet, cuplikan berikut akan dikompilasi tetapi tidak akan menghasilkan hasil yang diharapkan positif:
// This compiles but does not work
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(gestureHandler))
gesture.direction = [.right, .left, .up, .down]
self.addGestureRecognizer(gesture)
Sebagai solusinya, Anda harus membuat UISwipeGestureRecognizeruntuk setiap yang diinginkan direction.
Kode Playground berikut menunjukkan cara menerapkan beberapa UISwipeGestureRecognizeruntuk yang sama UIViewdan yang sama selectormenggunakan mapmetode Array :
import UIKit
import PlaygroundSupport
class SwipeableView: UIView {
convenience init() {
self.init(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
backgroundColor = .red
[UISwipeGestureRecognizerDirection.right, .left, .up, .down].map({
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(gestureHandler))
gesture.direction = $0
self.addGestureRecognizer(gesture)
})
}
func gestureHandler(sender: UISwipeGestureRecognizer) {
switch sender.direction {
case [.left]: frame.origin.x -= 10
case [.right]: frame.origin.x += 10
case [.up]: frame.origin.y -= 10
case [.down]: frame.origin.y += 10
default: break
}
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
view.addSubview(SwipeableView())
}
}
let controller = ViewController()
PlaygroundPage.current.liveView = controller