addSubLayer 到 UIView 而不是根视图

Posted

技术标签:

【中文标题】addSubLayer 到 UIView 而不是根视图【英文标题】:addSubLayer to UIView instead of root view 【发布时间】:2014-11-14 16:31:47 【问题描述】:

当我绘制一个图形并将其添加到控制器的视图中时,图形会正确显示。

CAShapeLayer *shapeLayer = [CAShapeLayer layer];
self.currentGraph = shapeLayer;
shapeLayer.strokeColor = [UIColor blackColor].CGColor;
shapeLayer.fillColor = [UIColor grayColor].CGColor;
shapeLayer.lineWidth = 1.0;
//[self.graphView.layer addSublayer:shapeLayer]; // Doesn't work!
[self.view.layer addSublayer:shapeLayer]; // Works!

如果我将它添加到应该包含图形的 UIView 中,则根本不会显示图形。

什么可能导致问题?

【问题讨论】:

任何有关如何调试此问题的一般建议将不亚于解决问题的方法! 一个想法是确认graphView(有或没有附加层)是可见的。也许将其背景颜色设置为明亮的颜色并确保其可见。 【参考方案1】:

我建议创建一个自定义UIView 子类来包含您的图层。这样您就可以获得作为 UIView 的所有好处,但可以灵活地控制层的类型。

class UIGradientView: UIView 

    override class func layerClass() -> AnyClass 
        return CAShapeLayer.self
    

【讨论】:

谢谢!但在这种情况下,graphView 也是一个 UIView,它应该包含图形作为它的子层,所以我不知道有什么区别 @MaximusS 这允许您使用addSubview 而不是addSublayer 来管理层次结构。这也意味着您可以更轻松地对其进行调试并查看视图在哪里,设置背景颜色,并找出放置问题。

以上是关于addSubLayer 到 UIView 而不是根视图的主要内容,如果未能解决你的问题,请参考以下文章

Swift:Tableview 中特定单元格中的 addSublayer 不是每个单元格

IOS CALayer

动画 UIView 从左侧而不是中心增长

UIView.animateKeyframes 跳转到下一个动画的开始而不是平滑过渡

在 UIView 外部(而不是内部)添加边框

如何将约束添加到根视图而不是 TopLayoutGuide?