【问题标题】:Access the UIBezierPath drawn on a UIView访问在 UIView 上绘制的 UIBezierPath
【发布时间】:2015-11-05 17:55:23
【问题描述】:

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

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

The overlapping background is the top right view.

【问题讨论】:

  • 我在图像中找不到任何三角形:P
  • 先生。 T 我很兴奋,画了一个更复杂的形状:)
  • 所有的图纸都是一条贝塞尔路径还是多条贝塞尔路径?
  • 该图像中有两个非矩形视图,彼此直接“穿过街道”。这些是添加在包含所有标准矩形视图的主视图顶部的单独 UIView 文件。非矩形视图是按照我上面介绍的方法绘制的。

标签: ios swift uiview uibezierpath


【解决方案1】:

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

如何仅访问 UIBezierPath 的图层并更改其颜色?

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

但由于您选择使用drawRect:,因此没有“UIBezierPath 层”。您将不得不调用 setNeedsDisplay,从而导致再次调用 drawRect: — 这一次,您绘制填充的三角形(或任何突出显示对您而言意味着)。

【讨论】:

  • 视图现在有一个点击手势识别器。你能引导我到某个我能读到关于 CAShapeLayer 的地方吗?看来我应该继续这样做。
  • 您已经链接到的问题有与之相关的答案。
  • 但是使用drawRect:并没有错。我一直这样做。你只需要保持某种状态:路径在哪里,是否填充等等。这样,当你画画时,你在那一刻做所有正确的事情。当然,您可以维护多个路径。
  • 谢谢。让我把它弄乱一分钟,如果它有效,我会标记你是正确的。最初看起来它可以满足我的需要。
  • 图层正在正确绘制,就像UIBezierPath 一样,但现在我无法访问UIView 中的图层,我将形状作为子视图放置。如何访问视图以更改其图层颜色?
猜你喜欢
  • 2014-02-14
  • 1970-01-01
  • 2017-08-04
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
相关资源
最近更新 更多