UISwipeGestureRecognizer
memiliki direction
properti 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 UISwipeGestureRecognizerDirection
sesuai 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 UISwipeGestureRecognizer
untuk setiap yang diinginkan direction
.
Kode Playground berikut menunjukkan cara menerapkan beberapa UISwipeGestureRecognizer
untuk yang sama UIView
dan yang sama selector
menggunakan map
metode 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