【问题标题】:How to implement drawLayer:InContext in the implementation file of a UIView?如何在 UIView 的实现文件中实现 drawLayer:InContext?
【发布时间】:2013-06-19 20:41:26
【问题描述】:

我有一个 UIView,我在其中使用 drawRect 方法绘制东西。我想在 UIView CALayer (self.layer) 上覆盖一个 CALayer,它会绘制我在 drawRect 中绘制的东西的一个子集。基本上,我在drawRect中画了很多圆圈,我想在叠加层上突出显示它们。我从作为 UIView 属性的模型对象获取圆的坐标。

我的第一次尝试是将子层s 添加到 UIView 层,将其委托设置为 UIView 并在需要时调用其 setNeedsDisplay 方法,但 drawLayer:InContext 被两个层(s 和 self 。层)。这不起作用:

-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
    if (layer == s ) {
    // draw stuffs for s
    }
    else if (layer==self.layer) {
    // do nothing
    }
}

导致黑色 UIView。我想从我可以访问我的数据模型的地方绘制s,以及对绘图有用的其他变量(线宽......)。我通过将s 的绘图移动到一个单独的对象来解决了这个问题,但这迫使我还要在这个对象中设置模型的指针,并复制其他参数。

所以我的问题是:在使用 drawRect 绘制其内容的 UIView 中,如何添加代表相同 UIView 的子层?

【问题讨论】:

    标签: ios core-graphics


    【解决方案1】:

    您需要继承 UIView 并在该子类中使用您自己的 CALayer 子类覆盖 + (Class)layerClass。然后,该 UIView 在创建其支持层时将使用该子类。然后,您的 CALayer 子类将覆盖 drawLayer

    您可以将这个 CALayer 子类(接口和实现)放在您的 UIView 子类中。

    【讨论】:

      猜你喜欢
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      相关资源
      最近更新 更多