Ios 将视图拖动到SwiftUI中的其他视图时删除视图
我在SwiftUI的父视图中有一个视图数组。阵列中的每个视图都有一个拖动手势,允许我在屏幕上分别移动它们 我的父视图中还有另一个视图,类似于垃圾桶图标 当我将其中一个阵列视图拖动到垃圾桶视图的空间中时,如何从阵列中删除该拖动视图,以便从屏幕中有效地“删除”该视图 这与这里提出的问题相同,但我正在寻找一个SwiftUI解决方案,而不是obj-c: 编辑:这就是代码的样子 父视图:Ios 将视图拖动到SwiftUI中的其他视图时删除视图,ios,swiftui,Ios,Swiftui,我在SwiftUI的父视图中有一个视图数组。阵列中的每个视图都有一个拖动手势,允许我在屏幕上分别移动它们 我的父视图中还有另一个视图,类似于垃圾桶图标 当我将其中一个阵列视图拖动到垃圾桶视图的空间中时,如何从阵列中删除该拖动视图,以便从屏幕中有效地“删除”该视图 这与这里提出的问题相同,但我正在寻找一个SwiftUI解决方案,而不是obj-c: 编辑:这就是代码的样子 父视图: struct parentView: View { @State var childViews: [Chil
struct parentView: View {
@State var childViews: [ChildView]
var body: some View {
ForEach(self.childViews, id: \.childId) { childView in
childView
}
.overlay(
DeleteIcon()
.padding(.top, 200)
)
}
}
子视图(有以下几种):
删除图标:
struct DeleteIcon: View {
var body: some View {
Rectangle()
.fill(Color.red)
.frame(width: 50, height: 200)
}
}
我做了一个非常简单和粗糙的测试,将其拖动到屏幕的左边缘 将“删除”该圆圈。为了从屏幕上“删除”,我使用了“showMe”变量和一个EmptyView。本质上,我只是用一个空视图替换视图
import SwiftUI
struct ContentView: View {
var body: some View {
Group {
DragThing(pos: CGPoint(x:111,y:111), name: "test1")
DragThing(pos: CGPoint(x:133,y:133), name: "test2")
DragThing(pos: CGPoint(x:166,y:166), name: "test3")
}
}
}
struct DragThing: View {
@State private var pos = CGPoint.zero
@State private var name = ""
@State private var showMe = true
init(pos: CGPoint, name: String) {
_pos = State(initialValue: pos)
_name = State(initialValue: name)
}
var body: some View {
showMe ?
AnyView(ZStack {
Circle().foregroundColor(.blue).frame(width: 100, height: 100)
Text(self.name).foregroundColor(.white)
}.position(self.pos).highPriorityGesture(self.drag))
: AnyView(EmptyView())
}
var drag: some Gesture {
DragGesture().onChanged { value in
self.pos = CGPoint(x: value.location.x, y: value.location.y)
if self.pos.x < 40 {
self.showMe = false
}
}
}
}
导入快捷界面
结构ContentView:View{
var body:一些观点{
团体{
绘图(位置:CGPoint(x:111,y:111),名称:“test1”)
绘图(位置:CGPoint(x:133,y:133),名称:“测试2”)
绘图(位置:CGPoint(x:166,y:166),名称:“test3”)
}
}
}
结构绘图:视图{
@国家私有var pos=CGPoint.zero
@国家私有变量名称=“”
@State private var showMe=true
初始化(位置:CGPoint,名称:String){
_pos=状态(初始值:pos)
_名称=状态(初始值:名称)
}
var body:一些观点{
给我看看?
AnyView(ZStack){
圆形().foregroundColor(.blue).frame(宽:100,高:100)
文本(self.name).foregroundColor(.white)
}.position(self.pos).高优先级手势(self.drag))
:AnyView(EmptyView())
}
动作:一些手势{
DragGesture().onChanged中的{值
self.pos=CGPoint(x:value.location.x,y:value.location.y)
如果自身位置x<40{
self.showMe=false
}
}
}
}
您愿意提供您的代码吗?@Asperi代码已添加用于Clarity是否有任何方法获取视图的坐标位置?这样,当可拖动视图的location.x和location.y坐标在另一个视图的坐标内时,可以删除可拖动视图吗?这就是我想要的解决方案是的,因此需要使用GeometryReader和适当的坐标空间修改器。
import SwiftUI
struct ContentView: View {
var body: some View {
Group {
DragThing(pos: CGPoint(x:111,y:111), name: "test1")
DragThing(pos: CGPoint(x:133,y:133), name: "test2")
DragThing(pos: CGPoint(x:166,y:166), name: "test3")
}
}
}
struct DragThing: View {
@State private var pos = CGPoint.zero
@State private var name = ""
@State private var showMe = true
init(pos: CGPoint, name: String) {
_pos = State(initialValue: pos)
_name = State(initialValue: name)
}
var body: some View {
showMe ?
AnyView(ZStack {
Circle().foregroundColor(.blue).frame(width: 100, height: 100)
Text(self.name).foregroundColor(.white)
}.position(self.pos).highPriorityGesture(self.drag))
: AnyView(EmptyView())
}
var drag: some Gesture {
DragGesture().onChanged { value in
self.pos = CGPoint(x: value.location.x, y: value.location.y)
if self.pos.x < 40 {
self.showMe = false
}
}
}
}