确定SwiftUI中的形状/视图是否将覆盖现有的形状/视图

问题描述

我有一个简单的应用程序,它将在屏幕上放置一些形状,但是用户目前可以掩盖现有形状,这是我想避免的。

首先,下面是一些简单的代码,可为我的项目提供MVP:

import SwiftUI

struct ContentView: View {
    var body: some View {
        ZStack {
            Circle()
                .fill(Color.red)
                .frame(width: 44,height: 44)
                .zIndex(1.0)
            
            Circle()
                .fill(Color.blue)
                .frame(width: 55,height: 55)
                .zIndex(2.0)
        }
    }
}

此图显示了上面的代码

enter image description here

但是,当zIndex翻转时,如此处所示,蓝色完全遮住了红色。

enter image description here

我希望用户不能执行此操作,但是我还没有在SwiftUI中找到可以确定形状是否被完全覆盖的东西。

解决方法

您可以尝试将每个形状表示为具有其自身大小和坐标(x和y)的结构。现有形状将以阵列形式放置。每当用户拖动形状时,您都将更新值并检查其大小和坐标是否与数组中的某个形状相同(您可以在手势结束时或手势发生时进行操作,这取决于您)。如果满足条件,则可以将静态形状移开 k 或以任何方式向用户显示他无法在该位置掉落形状