SwiftUI:在DragGesture视图上开始滑动时,ScrollView中的DragGesture不注册滚动]] << [

问题描述 投票:1回答:1
因此,当用户按下一个视图时,我会得到一个非常好的动画,在该视图下,它在手指下会像在触摸时一样“弹跳”。

初始目标

我需要在用户按下视图时进行注册(在本示例中为

黑色矩形),所以我可以开始缩小它,然后在他们在视图上释放时进行注册,所以我可以允许它返回到原始大小。用户仍然需要能够在ScrollView中正常滚动初始“解决方案”

我设法通过DragGesture()minimumDistance: 0手势实现了所需的动画。

See Example GIF here

这通过以下代码实现:

@State private var pressed: Bool = false var body: some View { let drag = DragGesture(minimumDistance: 0) .onChanged({_ in self.pressed = true }) .onEnded({_ in self.pressed = false }) return ScrollView { Rectangle() .frame(minHeight: 100) .scaleEffect(self.pressed ? 0.5 : 1) .animation(.easeInOut) // .onTapGesture(perform: { // self.pressed.toggle() // }) .gesture(drag) } }

问题

如果用户从用手指在矩形上开始滚动,它将注册为拖动手势。如果他们开始滚动到其他地方,则滚动是正常的

See Example GIF here

替代

如果使用修饰符.onTapGesture(),则可以点击并进行注册,并开始滚动并根据需要将其注册为滚动条

See Example GIF here

这通过以下代码实现:

@State private var pressed: Bool = false var body: some View { let drag = DragGesture(minimumDistance: 0) .onChanged({_ in self.pressed = true }) .onEnded({_ in self.pressed = false }) return ScrollView { Rectangle() .frame(minHeight: 100) .scaleEffect(self.pressed ? 0.5 : 1) .animation(.easeInOut) .onTapGesture(perform: { self.pressed.toggle() }) // .gesture(drag) } }

问题

所以如何在允许滚动的同时仍然获得所需的动画?我研究了GestureMaskssimultaneousGestureLongPressGesture等,但它们并没有实现我想要的快速响应动画...

谢谢!

因此,当用户按下一个视图时,我会得到一个非常好的动画,该动画将在手指下“弹跳”,就像它对触摸做出反应一样。当用户...

swift animation scrollview swiftui gesture
1个回答
1
投票
设法“主要”自己修复它,发布答案以帮助他人。
© www.soinside.com 2019 - 2024. All rights reserved.