Anda harus memiliki satu UISwipeGestureRecognizer
untuk setiap arah. Agak aneh karena UISwipeGestureRecognizer.direction
properti ini adalah topeng bit gaya-opsi, tetapi setiap pengenal hanya dapat menangani satu arah. Anda dapat mengirim semuanya ke penangan yang sama jika diinginkan, dan mengatasinya di sana, atau mengirimnya ke penangan yang berbeda. Inilah satu implementasi:
override func viewDidLoad() {
super.viewDidLoad()
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(respondToSwipeGesture))
swipeRight.direction = .right
self.view.addGestureRecognizer(swipeRight)
let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(respondToSwipeGesture))
swipeDown.direction = .down
self.view.addGestureRecognizer(swipeDown)
}
@objc func respondToSwipeGesture(gesture: UIGestureRecognizer) {
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
case .right:
print("Swiped right")
case .down:
print("Swiped down")
case .left:
print("Swiped left")
case .up:
print("Swiped up")
default:
break
}
}
}
Swift 3:
override func viewDidLoad() {
super.viewDidLoad()
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipeRight.direction = UISwipeGestureRecognizerDirection.right
self.view.addGestureRecognizer(swipeRight)
let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipeDown.direction = UISwipeGestureRecognizerDirection.down
self.view.addGestureRecognizer(swipeDown)
}
func respondToSwipeGesture(gesture: UIGestureRecognizer) {
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
case UISwipeGestureRecognizerDirection.right:
print("Swiped right")
case UISwipeGestureRecognizerDirection.down:
print("Swiped down")
case UISwipeGestureRecognizerDirection.left:
print("Swiped left")
case UISwipeGestureRecognizerDirection.up:
print("Swiped up")
default:
break
}
}
}
UISwipeGestureRecognizerDirection
di depan.Down
dll. Hanya menggunakanswipeDown.direction = .Down
jika cukup. Hanya sebuah tip =)swipe.direction = [.Right,.Down,.Up,.Left]
), pengenal bahkan tidak akan dipanggil, mungkin ini adalah masalah dengan swift, tetapi pada saat ini tidak berfungsi.Saya hanya merasa ingin berkontribusi ini, pada akhirnya terlihat lebih elegan:
sumber
self.addGestureRecognizer(gesture)
menyebabkan kesalahan bagi saya. Apa yang diperbaiki ituself.view.addGestureRecognizer(gesture);
.UIView
subkelas, tetapi Anda benar jika Anda berada diUIViewController
!Dari storyboard:
Dari viewController Anda:
sumber
Sepertinya hal-hal telah berubah belakangan ini. Dalam XCode 7.2 pendekatan berikut ini berfungsi:
Diuji dalam Simulator pada iOS 8.4 dan 9.2 dan pada perangkat aktual pada 9.2.
Atau, menggunakan ekstensi praktis mlcollard di sini :
sumber
[UISwipeGestureRecognizerDirection.right, .left, .up, .down]
Apple Swift versi 3.1 - Xcode Versi 8.3 (8E162)
Cara praktis dari pendekatan Alexandre Cassagne
sumber
defaults write com.apple.dt.xcode IDEPlaygroundDisableSimulatorAlternateFramebuffer -bool YES
Terminal untuk memperbaiki bug pada beberapa perangkat keras. Itu harus diperbaiki dalam versi baru XcodeDalam Swift 4.2 dan Xcode 9.4.1
Tambahkan delegasi Animasi, CAAnimationDelegate ke kelas Anda
Jika Anda ingin menghapus gesture dari tampilan, gunakan kode ini
Ex:
Sebut fungsi ini seperti
Seperti ini, Anda dapat menulis arahan yang tersisa dan harap berhati-hati apakah Anda memiliki tampilan gulir atau tidak dari bawah ke atas dan sebaliknya
Jika Anda memiliki tampilan gulir, Anda akan mendapatkan konflik untuk Atas ke bawah dan melihat gerakan sebaliknya.
sumber
UISwipeGestureRecognizer
memilikidirection
properti yang memiliki definisi berikut:Masalah dengan Swift 3.0.1 (dan di bawah) adalah bahwa meskipun
UISwipeGestureRecognizerDirection
sesuaiOptionSet
, cuplikan berikut akan dikompilasi tetapi tidak akan menghasilkan hasil yang diharapkan positif:Sebagai solusinya, Anda harus membuat
UISwipeGestureRecognizer
untuk setiap yang diinginkandirection
.Kode Playground berikut menunjukkan cara menerapkan beberapa
UISwipeGestureRecognizer
untuk yang samaUIView
dan yang samaselector
menggunakanmap
metode Array :sumber
UISwipeGestureRecognizerDirection(rawValue: 15)
Geser isyarat ke tampilan yang Anda inginkan, atau seluruh tampilan viewcontroller di Swift 5 & XCode 11 berdasarkan @Alexandre Cassagne
sumber
Geser Gerakan di Swift 5
sumber
Pertama buat a
baseViewController
dan tambahkanviewDidLoad
kode ini "swift4":Dan gunakan
baseController
kelas ini :sumber
Dalam Swift 5,
sumber
Hanya sintaks cepat swift untuk jawaban Nate:
sumber
Mudah. Ikuti saja kode di bawah ini dan selamat menikmati.
sumber
Untuk Swift 5 diperbarui
sumber
Setelah menggali sebentar:
Cara terpendek untuk menambahkan gesekan untuk semua 4 arah adalah:
sumber
Ini dapat dilakukan dengan hanya mendeklarasikan satu fungsi yang akan menangani semua usapan UISwipeGestureRecognizer swipe Anda. Ini kode saya:
Berikut adalah fungsi yang akan memberikan fungsi swipedirection:
sumber
Persis seperti itu: ( Swift 4.2.1 )
sumber