SwiftUI-在视图上拖动和释放时如何获得通知

SwiftUI-在视图上拖动和释放时如何获得通知,swiftui,Swiftui,我的屏幕上有两个圆圈(顶部和底部)。我希望用户按下顶部圆圈,然后拖动到底部圆圈 我没有拖拽(我不希望UI改变) 我只想知道,用户是从最上面的开始,然后将手指放在最下面的圆圈上。当用户将手指放在底部时 我无法从其他问题中找到答案 现行代码 截图 非常感谢您的帮助 在这里,我可以找到一种方法来通知这两个圆圈是否在彼此的内部: 现在还不清楚你想要达到什么目的,也许你可以添加更多关于你正在尝试的信息或gif。比起你@swiftPunk,我已经更新了我的问题,希望能更清楚!所以我认为正确的提问方式

我的屏幕上有两个圆圈(顶部和底部)。我希望用户按下顶部圆圈,然后拖动到底部圆圈

我没有拖拽(我不希望UI改变)

我只想知道,用户是从最上面的开始,然后将手指放在最下面的圆圈上。当用户将手指放在底部时

我无法从其他问题中找到答案

现行代码 截图


非常感谢您的帮助

在这里,我可以找到一种方法来通知这两个圆圈是否在彼此的内部:




现在还不清楚你想要达到什么目的,也许你可以添加更多关于你正在尝试的信息或gif。比起你@swiftPunk,我已经更新了我的问题,希望能更清楚!所以我认为正确的提问方式应该是:你想得到通知,如果蓝色圆圈被拖拽并在绿色圆圈上释放,对吗?否则你就不想收到关于它的通知谢谢。对不起,我的解释不是很好。我同意并更新了标题,以反映没有构建it功能,形状或对象可以意识到自己或其他人处于同一位置,我们应该以自定义方式创建,是吗?嘿@swiftPunk,谢谢你回答这个问题,非常感谢。我理解这种方法,而且效果很好!
import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Circle()
                .fill()
                .foregroundColor(.blue)
                .frame(width: 100, height: 100)
                .gesture(
                    DragGesture(minimumDistance: 0, coordinateSpace: .named("mySpace"))
                        .onChanged { value in
                            
                        }
                        .onEnded { value in
                            // if value.location == endPoint { 
                            //    print("user started press on blue and ended on green")
                            // }
                        }
                )

            Spacer()
            
            Circle()
                .fill()
                .foregroundColor(.green)
                .frame(width: 100, height: 100)
        }.coordinateSpace(name: "mySpace")
    }
}
import SwiftUI

struct ContentView: View {
    
    typealias OffsetType = (offset: CGSize, lastOffset: CGSize)
    
    @State private var objects: [OffsetType] = [(offset: CGSize(width: 0.0, height: -200.0), lastOffset: CGSize(width: 0.0, height: -200.0)),
                                                (offset: CGSize(width: 0.0, height: 200.0), lastOffset: CGSize(width: 0.0, height: 200.0))]
    
    var body: some View {
        
        ZStack {
            
            CircleView(color: Color.blue)
                .offset(objects[0].offset)
                .gesture(dragGesture(indexOfObject: 0))
            
            CircleView(color: Color.green)
                .offset(objects[1].offset)
                .gesture(dragGesture(indexOfObject: 1))
            
        }
        .animation(Animation.easeInOut(duration: 0.1))
        
    }
    
    func dragGesture(indexOfObject: Int) -> some Gesture {
        
        DragGesture(minimumDistance: 0.0, coordinateSpace: .global)
            .onChanged() { value in
                
                objects[indexOfObject].offset = CGSize(width: objects[indexOfObject].lastOffset.width + value.translation.width,
                                                       height: objects[indexOfObject].lastOffset.height + value.translation.height)
                
                
            }
            .onEnded() { value in
                
                objects[indexOfObject].lastOffset = CGSize(width: objects[indexOfObject].lastOffset.width + value.translation.width,
                                                           height: objects[indexOfObject].lastOffset.height + value.translation.height)
                
                objects[indexOfObject].offset = objects[indexOfObject].lastOffset
                
                distance()
                
            }
        
    }
    
    func distance() {
        
        if pow(pow((objects[1].offset.width - objects[0].offset.width), 2.0) + pow((objects[1].offset.height - objects[0].offset.height), 2.0), 0.5) <= 100 { print("same place!") }
    }
    
}
struct CircleView: View {
    
    let color: Color
    
    var body: some View {
        
        Circle()
            .fill(color)
            .frame(width: 100, height: 100)
        
    }
}