访问在 UIView 上绘制的 UIBezierPath
Posted
技术标签:
【中文标题】访问在 UIView 上绘制的 UIBezierPath【英文标题】:Access the UIBezierPath drawn on a UIView 【发布时间】:2015-11-05 17:55:23 【问题描述】:我绘制了一个自定义形状的UIView
,我使用以下答案将drawRect(_:)
方法改写为三角形:The *** answer
现在我想在用户点击时突出显示该三角形。我想我可以在它上面用不同的颜色绘制另一个三角形,但我希望这个视图稍后执行其他任务。自定义视图的边界与另一个视图重叠,所以我不能只更改整个 UIView's
背景颜色,只能更改 UIBezierPath's
背景颜色。如果您查看附加的图像,则所选视图的背景会覆盖附近的视图。如何仅访问 UIBezierPath's
图层并更改其颜色?
The overlapping background is the top right view.
【问题讨论】:
我在图像中找不到任何三角形:P 先生。 T 我很兴奋,画了一个更复杂的形状:) 所有的图纸都是一条贝塞尔路径还是多条贝塞尔路径? 该图像中有两个非矩形视图,彼此直接“穿过街道”。这些是添加在包含所有标准矩形视图的主视图顶部的单独 UIView 文件。非矩形视图是按照我上面介绍的方法绘制的。 【参考方案1】:给视图一个点击手势识别器。现在你知道它什么时候被点击了。您可以使用命中测试和您对形状的了解来了解点击是否在三角形内。
如何仅访问 UIBezierPath 的图层并更改其颜色?
如果您使用了 CAShapeLayer 方法,您可以这样做;您所要做的就是更改图层的fillColor
(如果这就是突出显示对您的意义)。
但由于您选择使用drawRect:
,因此没有“UIBezierPath 层”。您将不得不调用 setNeedsDisplay
,从而导致再次调用 drawRect:
— 这一次,您绘制填充的三角形(或任何突出显示对您而言意味着)。
【讨论】:
视图现在有一个点击手势识别器。你能引导我到某个我能读到关于 CAShapeLayer 的地方吗?看来我应该继续这样做。 您已经链接到的问题有与之相关的答案。 但是使用drawRect:
并没有错。我一直这样做。你只需要保持某种状态:路径在哪里,是否填充等等。这样,当你画画时,你在那一刻做所有正确的事情。当然,您可以维护多个路径。
谢谢。让我把它弄乱一分钟,如果它有效,我会标记你是正确的。最初看起来它可以满足我的需要。
图层正在正确绘制,就像UIBezierPath
一样,但现在我无法访问UIView
中的图层,我将形状作为子视图放置。如何访问视图以更改其图层颜色?以上是关于访问在 UIView 上绘制的 UIBezierPath的主要内容,如果未能解决你的问题,请参考以下文章