gpt4 book ai didi

ios - 如何实现drawLayer :InContext in the implementation file of a UIView?

转载 作者:行者123 更新时间:2023-11-29 03:49:41 26 4
gpt4 key购买 nike

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

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

-(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中,如何添加一个子层,其委托(delegate)是相同的UIView?

最佳答案

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

您可以将此 CALayer 子类(接口(interface)和实现)放入您的 UIView 子类中。

关于ios - 如何实现drawLayer :InContext in the implementation file of a UIView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17200911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com