Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SwiftUI:ScrollView中的DragGesture不';在Dragesture视图上开始滑动时,不注册滚动_Swift_Animation_Scrollview_Swiftui_Gesture - Fatal编程技术网

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)
}
}

这是一个非常好的答案!虽然它在最初点击时确实会缩小,但它允许视图滚动,并且还会向后增长。我用一个包含多个项目的列表尝试了这个方法,效果非常好!