我需要能够与包含许多不同部分的圆筒的表示进行交互。当用户点击小矩形时,我需要显示与特定部分(表单)相关的弹出窗口。
下一张图片演示了逼真的 3d 方法。但是,我再说一遍,我需要解决这个问题,3d 不是 必需的(不过会很酷)。满足功能需求的表示就足够了。
关于制作绘图的部件的信息来自 API(尺寸、位置等)
我不需要它真的很现实。最简单的近似是在二维表示中显示一个圆筒,就像一个由可交互的小矩形组成的矩形。
因此,正如我所提到的,我认为(在我看来)有两种相反的方法:现实的或简化的
有没有办法在中间实现一个很好的解决方案?我应该研究哪些库、组件、框架?
我的研究让我找到了 SceneKit,但我仍然不知道我是否能够与它交互。 交互是一个非常重要的部分,因为我需要在用户点击圆柱体上的任何小矩形时显示弹出窗口。
谢谢
最佳答案
您不需要任何特殊的框架来实现这样的交互。这种效果可以通过标准的 UIKit
和 UIView
以及一点三角函数来实现。实际上,您可以使用 2D 数学和绘图精确绘制示例图像。我的答案不是一个精确的公式,而是涉及思考如何定义形状并将问题分解为可管理的步骤。
一个圆柱体可以由两个偏移的圆来定义,这些圆代表端件,在它们的半径处连接。我将使用正交投影,这意味着圆柱体不会随着深度延伸到背景中而显得更小(但如果需要,您可以适应透视)。您可以在 UIView drawRect
中使用 CoreGraphics 绘制它。
正方形切片代表圆的一个角 block ,偏移量小于圆柱体的长度,但方向相同,如下图所示(抱歉绘图不精确)。
您感兴趣的这个方形切片是用实心红色勾勒出的区域,在第一个圆的半径之外,在假想的第二个圆的半径之内(它只是从第一个圆偏移您想要的任何长度切片)。
要绘制此区域,您只需绘制一条包含每个圆弧轮廓的路径并连接端点即可。
检查触摸是否在这些方形切片之一内:
- 检查触摸点是否位于
a
原点的角度a
之间。 - 检查触摸点是否在内圆半径之外。
- 检查触摸点是否在外圆的半径内。 (请注意,如果圆圈之间的距离超过一个半径,这意味着什么。)
要找到一个点来显示弹出窗口,您可以平均切片上的端点或找到两条边之间的中间角并偏移一半的距离。
关于ios - 在 iOS 中与复杂的图形交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32848726/