访问在 UIView 上绘制的 UIBezierPath

Access the UIBezierPath drawn on a UIView

我绘制了一个自定义形状的 UIView,我使用以下答案将 drawRect(_:) 方法改写为三角形:

现在我想在用户点击该三角形时突出显示它。我想我可以在它上面用不同的颜色绘制另一个三角形,但我希望此视图稍后执行其他任务。自定义视图的边界与另一个视图重叠,所以我不能只更改整个 UIView's 背景颜色,只能更改 UIBezierPath's 背景颜色。如果您查看所附图片,所选视图的背景会覆盖附近的视图。我怎样才能只访问 UIBezierPath's 图层并更改它的颜色?

The overlapping background is the top right view.

为视图提供点击手势识别器。现在你知道什么时候被点击了。您可以使用点击测试和您对形状的了解来了解点击是否在三角形内。

How can I access just the UIBezierPath's layer and change it's color?

如果你使用了 CAShapeLayer 方法,你就可以做到;您所要做的就是更改图层的 fillColor(如果这就是突出显示对您的意义)。

但由于您选择使用 drawRect:,所以没有 "UIBezierPath's layer"。您将不得不调用 setNeedsDisplay,从而导致再次调用 drawRect: — 这一次,您绘制填充的三角形(或任何突出显示对您意味着什么)。