使用 .gesture(LongPressGesture) 打破滚动视图
Using .gesture(LongPressGesture) break the Scrollview
我正在使用 Swift 5,SwiftUI 3.0 Xcode 13.2.
我有以下代码:
ZStack { ... custom button }
.gesture(LongPressGesture(minimumDuration: 0.5, maximumDistance: 30)
.onEnded { _ in
withAnimation(.easeInOut(duration: 1.0)) {
// code when ended...
}
}
.onChanged { _ in
withAnimation(.easeInOut(duration: 0.2)) {
// code when touched...
}
})
我们称其为 CustomButton
。
然后我有了这个 ScrollView 和 LazyVGrid:
ScrollView {
VStack(spacing: 15) {
let columns = Array(repeating: GridItem(.flexible(), spacing: 10), count: 1)
LazyVGrid(columns: columns,spacing: 15) {
CustomButton()
CustomButton()
// and then some more...
}
}
}
现在,当我从 CustomButton 中删除 onChange
处理程序时,滚动工作正常。所以我猜测,由于 onChange()
在我点击按钮后立即触发,因此它优先于 ScrollView
。但是,我需要在 onChange()
被触发后或用户触摸按钮后发生的动画。
我试过在 .gesture()
修饰符之前有一个空的 .onTapGesture {}
。
我试过将 .gesture
更改为 .simulatenousGesture
我已经尝试了在 SO 或 AppleDev 论坛上可以找到的大部分内容。
我想知道是否可以在 ScrollView 中添加一个按钮,即:
- 接受 0.0
minimumDuration
触摸,或 .gesture().onChange
- 在 ScrollView 中仍可滚动
任何帮助将不胜感激,谢谢!
这个变体有效(不要问我为什么...):
struct CustomButton: View {
var body: some View {
RoundedRectangle(cornerRadius: 15)
.frame(height: 50)
.onTapGesture {
print("tapped")
}
.onLongPressGesture(minimumDuration: 0.5, maximumDistance: 30) {
print("longpress ended")
} onPressingChanged: { pressing in
print("longpress changed")
}
}
}
我正在使用 Swift 5,SwiftUI 3.0 Xcode 13.2.
我有以下代码:
ZStack { ... custom button }
.gesture(LongPressGesture(minimumDuration: 0.5, maximumDistance: 30)
.onEnded { _ in
withAnimation(.easeInOut(duration: 1.0)) {
// code when ended...
}
}
.onChanged { _ in
withAnimation(.easeInOut(duration: 0.2)) {
// code when touched...
}
})
我们称其为 CustomButton
。
然后我有了这个 ScrollView 和 LazyVGrid:
ScrollView {
VStack(spacing: 15) {
let columns = Array(repeating: GridItem(.flexible(), spacing: 10), count: 1)
LazyVGrid(columns: columns,spacing: 15) {
CustomButton()
CustomButton()
// and then some more...
}
}
}
现在,当我从 CustomButton 中删除 onChange
处理程序时,滚动工作正常。所以我猜测,由于 onChange()
在我点击按钮后立即触发,因此它优先于 ScrollView
。但是,我需要在 onChange()
被触发后或用户触摸按钮后发生的动画。
我试过在 .gesture()
修饰符之前有一个空的 .onTapGesture {}
。
我试过将 .gesture
更改为 .simulatenousGesture
我已经尝试了在 SO 或 AppleDev 论坛上可以找到的大部分内容。
我想知道是否可以在 ScrollView 中添加一个按钮,即:
- 接受 0.0
minimumDuration
触摸,或.gesture().onChange
- 在 ScrollView 中仍可滚动
任何帮助将不胜感激,谢谢!
这个变体有效(不要问我为什么...):
struct CustomButton: View {
var body: some View {
RoundedRectangle(cornerRadius: 15)
.frame(height: 50)
.onTapGesture {
print("tapped")
}
.onLongPressGesture(minimumDuration: 0.5, maximumDistance: 30) {
print("longpress ended")
} onPressingChanged: { pressing in
print("longpress changed")
}
}
}