首页 > 解决方案 > SwiftUI Image 通过触摸透明像素

问题描述

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

  1. 确定分接点是否具有 alpha == 0
  2. 提供 Bézier 路径contentShape()

例如,我希望点击橙色图像的透明部分以通过绿色图像。透明区域可能是非连接的,就像这些图像中的“洞”。

截屏

方法一

@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.

方法二

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

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

对于我的项目,我可能能够使用pygame. 但是进行透明命中测试似乎更直接。

标签: iosswiftuialphahittest

解决方案


推荐阅读