Ios SwiftUI图像在透明像素上通过触摸

Ios SwiftUI图像在透明像素上通过触摸,ios,swiftui,alpha,hittest,Ios,Swiftui,Alpha,Hittest,TL;DR:我想在SwiftUI中重新解决这个经典(在UIKit中解决)问题:如何传递到后面的视图,以及透明部分中的触摸。一些方法: 确定抽头点的alpha==0 为contentShape() 例如,我希望在橙色图像的透明部分点击,以通过绿色图像。透明区域可能是非连接的,就像这些图像中的“孔” 方法1 @objc func handleTap(_ tgr: UITapGestureRecognizer) { let p = tgr.location(in: self) if

TL;DR:我想在SwiftUI中重新解决这个经典(在UIKit中解决)问题:如何传递到后面的视图,以及透明部分中的触摸。一些方法:

  • 确定抽头点的alpha==0
  • contentShape()
  • 例如,我希望在橙色图像的透明部分点击,以通过绿色图像。透明区域可能是非连接的,就像这些图像中的“孔”

    方法1

    @objc func handleTap(_ tgr: UITapGestureRecognizer) {
        let p = tgr.location(in: self)
        if pointIsOpaque(p) {
            // Handle it now.
        } else {
            // Pass it through.
        }
    }
    
    查找
    pointIsOpaque()
    属性在中有详细介绍

    但如何在SwiftUI中使用它让我不知所措——既决定像素alpha,又如何将事件传递到z顺序中的下一个视图。我宁愿使用纯SwiftUI,也不愿使用
    UIViewRepresentable
    包装

    方法2

    既有"解决方案",;它带来的挑战和解决的挑战一样多。这是为了提供到
    View.contentShape()
    的路径。对于连接的透明区域,这应该是完美的-但是如何计算路径呢?奇偶规则将有助于简单的断开区域。但是如果透明部分是康托集呢?(JK,但可能很复杂。)

    有一些关于计算不透明边界的信息:


    对于我的项目,我可以使用
    pygame
    预先计算边界。但是做透明点击测试似乎更直接。

    Hmm,我没有得到透明性下降,也没有使用普通的
    ontapsignate()
    signate(tappsignate())
    。我本来希望它能“起作用”,但事实并非如此。在所示的测试应用程序中,橙色视图处理其矩形内的所有点击,即使是在透明部分。你有关于自动跳转的参考资料吗?我将分开
    contentShape()
    方法来回答一个单独的问题。与此同时,我关于透明度测试和tap委托的问题仍然没有解决。我的错误是关于视图,而不是光栅图像。我在下面的帖子中使用了遮罩和
    ContentShape()
    解决了这个问题。我仍然在想,我是否能以某种方式让自动透明度下降。