Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.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
Ios 将视图拖动到SwiftUI中的其他视图时删除视图_Ios_Swiftui - Fatal编程技术网

Ios 将视图拖动到SwiftUI中的其他视图时删除视图

Ios 将视图拖动到SwiftUI中的其他视图时删除视图,ios,swiftui,Ios,Swiftui,我在SwiftUI的父视图中有一个视图数组。阵列中的每个视图都有一个拖动手势,允许我在屏幕上分别移动它们 我的父视图中还有另一个视图,类似于垃圾桶图标 当我将其中一个阵列视图拖动到垃圾桶视图的空间中时,如何从阵列中删除该拖动视图,以便从屏幕中有效地“删除”该视图 这与这里提出的问题相同,但我正在寻找一个SwiftUI解决方案,而不是obj-c: 编辑:这就是代码的样子 父视图: struct parentView: View { @State var childViews: [Chil

我在SwiftUI的父视图中有一个视图数组。阵列中的每个视图都有一个拖动手势,允许我在屏幕上分别移动它们

我的父视图中还有另一个视图,类似于垃圾桶图标

当我将其中一个阵列视图拖动到垃圾桶视图的空间中时,如何从阵列中删除该拖动视图,以便从屏幕中有效地“删除”该视图

这与这里提出的问题相同,但我正在寻找一个SwiftUI解决方案,而不是obj-c:

编辑:这就是代码的样子

父视图:

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