ios - SwiftUI Image 通过触摸透明像素
问题描述
TL;DR:我想在 SwiftUI 中重新解决这个经典(并在 UIKit 中解决)问题:如何传递、传递到后面的视图、触摸透明部分。一些方法:
- 确定分接点是否具有 alpha == 0
- 提供 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
. 但是进行透明命中测试似乎更直接。
解决方案
推荐阅读
- c - 我什么时候必须释放分配的内存?
- javascript - 自动完成在keyup jquery中的奇怪行为
- mysql - 我应该怎么做才能根据条件加入 2 个表?
- sql - SQL 存储过程 - 代码长度 > 8,000 时运行错误
- api - 在响应模型中传递数据库约束是 REST 好/坏的做法吗
- javascript - Treemap 中不同的工具提示和值 || 海图
- listview - (FLUTTER) ontap ListView(return listTile()) with Streambuilder 导致继承数据为空?
- java - Cassandra - 将一个巨大的字段设置为 null 不归还磁盘空间
- listview - 如何在不将滚动位置重置为顶部的情况下通过 Provider 向 Flutter ListView Builder 添加更多数据
- postgresql - 连接本地 postgres 数据库时,docker pgAdmin4 连接被拒绝