我开始使用原生iPad应用程序(如果需要,我们可以假设iOS 4.3),我需要有一系列相互碰撞的弯曲区域.
我喜欢一些关于处理这个问题的最佳方法的建议.
我有一个想法是使用WebView,只有一个JPG和一个HTML图像映射,但我真的更喜欢使用某种支持曲线的原生UI元素.
有什么建议?
最佳答案 我们有这样的问题.为了解决这个问题,我们在Adobe Illustrator中创建了一个黑白面具.您需要为所需的每个不同区域执行此操作.
接下来,我们导出了这个文件.我不记得文件导出选项,但基本上你得到一个文本文件,其中包含一些路径数据,包括行,贝塞尔曲线等.
然后我们接受了这个文件并写了一个解析它的导入器并创建了一个CGPath.
最后阶段很简单.您可以从UITouch获取触摸点并执行CGPathContainsPoint调用.
这是一些伪代码:
>在我们使用“1 XR”之前跳过线.那就是
在后续行中指示有意义的内容.
>使用“”分隔符将行拆分为一个组件数组.
>该行的最后一个组成部分是操作.如果它是“m”则是路径移动,如果它是“C”,则它是一条bezier曲线,如果它是“L”则它是一条线.
>如果它是“Y”或“V”,那么您需要获取前一行的组件并解析如下:
(a)组件数包括行动,因此我们需要减少这一点.例如. 274.5600 463.6800米
(b)如果这条线有四个坐标而前一个有两个坐标,那么它就是贝塞尔节点的一个点节点.计算贝塞尔曲线点如下:
cp1x = previous line's components object at index 0
cp1y = previous line's components object at index 1
cp2x = this line's components object at index 0
cp2y = this line's components object at index 1
x = this line's components object at index 2
y = this line's components object at index 3
(c)否则,如果该线有四个坐标,前一行有四个或六个坐标,则如下图所示:
cp1x = this line's components object at index 0
cp1y = this line's components object at index 1
cp2x = this line's components object at index 2
cp2y = this line's components object at index 3
x = this line's components object at index 2
y = this line's components object at index 3
其中cp是“控制点”.所以你有控制点1和控制点2及其各自的x和y坐标.