SwiftUI:ScrollView中的DragGesture不';在Dragesture视图上开始滑动时,不注册滚动
所以我有一个非常好的动画,当用户按下一个视图时,它会在他们的手指下“反弹”,就像它对触摸做出反应一样 初始目标 我需要在用户按下视图时注册(本例中为黑色矩形),这样我就可以开始缩小它,然后在他们在视图上释放时注册,这样我就可以让它恢复到原始大小。用户仍然需要能够在SwiftUI:ScrollView中的DragGesture不';在Dragesture视图上开始滑动时,不注册滚动,swift,animation,scrollview,swiftui,gesture,Swift,Animation,Scrollview,Swiftui,Gesture,所以我有一个非常好的动画,当用户按下一个视图时,它会在他们的手指下“反弹”,就像它对触摸做出反应一样 初始目标 我需要在用户按下视图时注册(本例中为黑色矩形),这样我就可以开始缩小它,然后在他们在视图上释放时注册,这样我就可以让它恢复到原始大小。用户仍然需要能够在ScrollView 初始“解决方案” 我使用DragGesture()手势和minimumDistance:0实现了所需的动画 这是通过以下代码实现的: @State private var按下:Bool=false var bod
ScrollView
初始“解决方案”
我使用DragGesture()
手势和minimumDistance:0
实现了所需的动画
这是通过以下代码实现的:
@State private var按下:Bool=false
var body:一些观点{
让阻力=阻力(最小距离:0)
.onChanged({uu}in
self.pressed=true
})
.onEnded({uu}in
self.pressed=false
})
返回滚动视图{
矩形()
.框架(最小高度:100)
.scaleEffect(自按?0.5:1)
.animation(.easeInOut)
//.ONTAPPORATE(执行:{
//self.pressed.toggle()
// })
.手势(拖动)
}
}
问题
如果用户以手指在矩形上开始滚动,它将注册为拖动手势。如果它们开始在其他地方滚动,则滚动与正常情况相同
可供替代的
如果我使用修饰符.ontapsignature()
,那么我可以点击并注册它,也可以开始滚动,并根据需要注册为滚动
这是通过以下代码实现的:
@State private var按下:Bool=false
var body:一些观点{
让阻力=阻力(最小距离:0)
.onChanged({uu}in
self.pressed=true
})
.onEnded({uu}in
self.pressed=false
})
返回滚动视图{
矩形()
.框架(最小高度:100)
.scaleEffect(自按?0.5:1)
.animation(.easeInOut)
.ONTAPPORATE(执行:{
self.pressed.toggle()
})
//.手势(拖动)
}
}
问题:
那么,我如何在允许滚动的同时仍然获得所需的动画呢?我已经研究了手势面具
,同时手势
,长按手势
等等,但它们并没有实现我想要的快速响应动画
谢谢 自己设法“大部分”修复了它,发布了答案以帮助他人
这并不完美,但要好得多。如果有人能想出如何使它在滚动时不缩小比例,那就太好了。但除此之外,您可以点击它并在其上滚动
struct ContentView:View{
@按下状态私有变量:Bool=false
var body:一些观点{
打印(自按)
返回滚动视图{
按钮(操作:{self.pressed.toggle()}){
矩形()
.框架(最小高度:100)
.animation(.easeInOut)
}.buttonStyle(点击BounceButtonStyle())
}
}
}
结构tapBounceButtonStyle:ButtonStyle{
func makeBody(配置:Self.configuration)->一些视图{
配置标签
.scaleEffect(配置.isPressed?0.9:1)
}
}
这是一个非常好的答案!虽然它在最初点击时确实会缩小,但它允许视图滚动,并且还会向后增长。我用一个包含多个项目的列表尝试了这个方法,效果非常好!