如何使用Paintcode访问UIView自定义类内部的图层?

时间:2017-08-05 21:55:23

标签: ios swift paint-code cgrectintersectsrect

我使用Paintcode V3和最后一个Xcode作为我的项目。

在Paintcode中,我绘制了一条红色路径,一种"时钟指针"使用半径变量来旋转它。

enter image description here

在我的Xcode项目中,这个自定义UIView被添加到主视图中。

当红色路径旋转时,我需要知道它何时与视图的另一个元素相交。

我试过了:

if self.redPathView.frame.intersects(self.anotherView.frame) {       
    //do something...                   
}

但它无法正常工作,因为redPathView是整个Paintcode画布(方框),而不仅仅是红色路径。

我正在寻找一种方式来访问我观看的红色路径。

1 个答案:

答案 0 :(得分:0)

有趣的问题。

我不认为有办法完全按照你的意愿行事...... 就像你提到的那样,当我们使用PaintCode时,我们的自定义绘图变成了整个UIView 我们无法访问其特定元素(例如您的redPathView)。

(如果有人知道我们是否真的可以,我会偏爱这个问题。我可能错了。)

无论如何,有一个解决方法。您可以使用PaintCode本身告诉您"碰撞"发生。当然,那么你需要在那里绘制所有东西......并实现某种对你有意义的内部控制。

例如,在下面的图片中,我创建了这个"时钟指针",其功能是检测红色物体何时触及其他UI元素(关键点有touchedElementID表达式 - 观察如何用矩形的" ID"更新自己:

paintCode

使用这种方法可能会遇到一些问题,例如需要知道屏幕上其他元素的确切位置以及可能的复杂三元结构,如:

(rotationSanitized <= -352 || rotationSanitized >= -8) ?
1 :
(rotationSanitized <= -82 && rotationSanitized >= -98) ?
2 :
(rotationSanitized <= -172 && rotationSanitized >= -188) ?
3 :
(rotationSanitized <= -262 && rotationSanitized >= -278) ?
4 : 0

另外,如何&#34; export&#34;并将此信息与Xcode中的StyleKit一起使用?

我做的诀窍是在PaintCode中添加一个空(无Fill,无Stroke)UI元素,并将touchedElementID表达式结果与alpha值相关联元素。

这样我可以在自定义视图中访问表达式,例如通过StyleKit.touchedElementID。但是这引入了一个新问题,因为现在我必须在每次导出时更改生成的StyleKit(两行代码,但仍然)。这是一种脆弱的解决方案。

但是,如果您对此感到满意,那么这只是消费这些新信息的问题...... 为此,我创建了一个协议,因此我的ViewController可以充当我的自定义视图的委托,并且当PaintCode中的大多数内部UI元素被触及时,执行它需要做的任何事情。 / p>

以下是最终结果:

iOS

最后,check this project in GitHub with all the code and samples