我已经在视图中创建了一个DragGesture,无论用户向左还是向右滑动,它都应该选择@State(Bool)。
问题是,只有向右滑动才能被检测到。
如何使用.gesture()捕捉用户在屏幕上是向左还是向右滑动?
import SwiftUI
struct SwiftUIView: View {
//MARK: Value to change on swipe gesture
@State var swipeRight: Bool
var body: some View {
VStack {
//MARK: Value displayed after user swiped
Text($swipeRight ? "Right" : "Left")
}
.gesture(
DragGesture()
.onChanged { (value) in
//MARK: What is it missing here?
switch value.location.x {
case ...(-0.5):
self.swipeRight = false
print("Swipe Left return false")
case 0.5...:
self.swipeRight = true
print("Swipe Right return true")
default: ()
}
})
}
字符串
6条答案
按热度按时间r1zhe5dt1#
Swift 5,iOS 13
由[Mojtaba Hosseini ][1]在这里提出的改进版本。
[1]:https://stackoverflow.com/users/5623035/mojtaba-hosseini.将枚举和函数放在ContentView的主体之前。
字符串
...
在DragGesture中调用它。在onEnded上调用它以阻止它多次发射。
型
显然,您需要/可以根据需要添加其他方向......
n6lpvg4x2#
你应该比较一下旧的和新的位置:
字符串
所以你的代码的重构版本应该是:
型
ny6fqffe3#
我想上面的方向是颠倒的?或者我误解了左右滑动。无论如何,这里有一个使用视图修饰符的进一步改进。你可以在.onSwipe { direction in.}到你的视图。
字符串
dgiusagp4#
扩展
DragGesture.Value
:字符串
为
View
添加dismissingGesture方法:型
示例用法:
型
wpx232ag5#
我在@emehex代码中做了一个小改进,允许您选择方向
字符串
62lalag46#
这里有一个非常直接的例子,它检测到一个超过一定最小距离的阻力,然后决定哪个方向的阻力最大。
字符串