【问题标题】:How to restrict CALayer display to subrectangle如何将 CALayer 显示限制为子矩形
【发布时间】:2019-06-10 17:23:07
【问题描述】:

我有一个显示静态内容的 CALayer。用户可以动态传递其框架的子区域,我想要动态地将其可见部分限制为该子区域。其余部分应为黑色。这样做的正确方法是什么?

【问题讨论】:

    标签: ios swift uikit core-animation calayer


    【解决方案1】:

    来自苹果文档:

    您应该将任何绘图限制在 rect 参数中指定的矩形内。

    这似乎暗示传递的“rect”只是一个建议。它不会为您创建它。

    因此,如果您传入一个准确的子矩形,您应该将上下文转换为您定义的 x 和 y 值。

    override func draw(_ rect: CGRect) {
        let context = UIGraphicsGetCurrentContext()!
        context.translateBy(x: rect.minX, y: rect.minY)
        // Do your drawing here...
    }
    

    【讨论】:

    • 对不起,这不是我要找的。寻找一种用透明或黑色像素遮盖区域的方法
    • @DeepakSharma 没错。你为什么不直接用一个被遮盖的黑色层覆盖你的层,以便在其中有一个与你的矩形相对应的透明矩形孔?有什么困难?
    • @matt 你能告诉我具体怎么做吗?如何指定黑色层的形状?据我了解,黑色层的形状需要在每个 drawRect 循环中计算。在每个 drawRect 循环中,我都需要更新或创建一个新的形状图层并将其设置为蒙版。这是你推荐的吗?
    • 图层没有绘制矩形循环。每次用户给您一个子矩形时,您只需重新计算掩码。您没有在问题中说明这意味着什么。
    • 我已经多次解释了如何在视图中打孔,如下所示:stackoverflow.com/a/23452614/341994 如果您需要更准确的建议,请提出更有意义的问题。
    【解决方案2】:

    创建一个新的 calayer,其 frame rect 等于用户的 subrect,并将其指定为静态内容层的遮罩层。这将只绘制蒙版区域。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 2019-10-05
      • 2019-05-24
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      相关资源
      最近更新 更多