微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

手势优先SwiftUI

如何解决手势优先SwiftUI

我试图在滚动视图中制作一个水平列表视图,并让我LongPress拾取一个元素并将其重新排列。我似乎无法在父视图中同时具有dragGesture和childView中的LongPress手势。我尝试过highPriorityGesture,它重写了childView的手势,没有它,滚动视图的拖动手势被覆盖。希望能有所帮助。

struct CustomHList<T:View>: View {
    
    @Binding var items:[T]
    @Binding var activeItem:Int
    @Binding var editing:Bool
    
    @State private var editingInd:Int? = nil
    @State private var offset = CGSize.zero
    @State private var isDragging = false
    @GestureState private var isHolding = false
    
    
    var body: some View {
        
        
        return vstack{
            ScrollView(.horizontal,showsIndicators: false) {
            HStack{
                
                ForEach(0..<items.count){ind in
                    
                        items[ind]
                            .offset(editingInd != nil && editingInd == ind ? offset:CGSize.zero)
                            .gesture(LongPressGesture(minimumDuration: 1.5)
                                        .updating($isHolding) {currentstate,gestureState,transaction in
                                            gestureState = currentstate

                                        }
                                        .onEnded { value in
                                            withAnimation {
                                                isDragging = true
                                                
                                            }
                                            

                                            
                                        }
                            .sequenced(before: DragGesture()
                                        .onChanged{value in self.offset = value.translation}
                                        .onEnded { _ in
                                            withAnimation {
                                                offset = .zero
                                                isDragging = false
                                            }
                                            editingInd = 100
                                        }))
                    
                    
                    
                    
                }
               
            }
        }.highPriorityGesture(DragGesture())
            Text("\(editingInd ?? 100)")
            Text(isHolding ? "Yes":"No")
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。