作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 View 中创建了一个 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: ()
}
})
}
最佳答案
Swift 5、iOS 13
[Mojtaba Hosseini][1] 在此提出的改进版本。
[1]:https://stackoverflow.com/users/5623035/mojtaba-hosseini .将枚举和函数放在 ContentView 主体之前。
enum SwipeHVDirection: String {
case left, right, up, down, none
}
func detectDirection(value: DragGesture.Value) -> SwipeHVDirection {
if value.startLocation.x < value.location.x - 24 {
return .left
}
if value.startLocation.x > value.location.x + 24 {
return .right
}
if value.startLocation.y < value.location.y - 24 {
return .down
}
if value.startLocation.y > value.location.y + 24 {
return .up
}
return .none
}
...
在 DragGesture 中调用它。在 onEnded 上调用它以阻止其多次触发。
.gesture(DragGesture()
.onEnded { value in
print("value ",value.translation.width)
let direction = self.detectDirection(value: value)
if direction == .left {
// your code here
}
}
)
显然您需要/可以根据需要添加其他方向...
关于ios - 如何在 SwiftUI 中实现触发 switch case 的左或右 DragGesture() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59109138/
我是一名优秀的程序员,十分优秀!