渐变层在视图中不可见

Posted

技术标签:

【中文标题】渐变层在视图中不可见【英文标题】:CAGradient layer not visible on view 【发布时间】:2017-03-15 10:49:24 【问题描述】:

我尝试在使用 Core Graphics 制作的饼图中添加 CAGradient 效果。事实证明,我不能,当然也不能很好地理解如何将它应用于作为 CGPath 一部分的视图......

override func draw(_ rect: CGRect)
    
    ...
    func arc(myRadius: CGFloat, myStartAngle: CGFloat, myEndAngle: CGFloat) 
        // This is the pie chart segment
        context?.setFillColor(phenotypeColor.cgColor)
        context?.move(to: center)
        context?.addArc(center: center, radius: finalRadius, startAngle: myStartAngle, endAngle: myEndAngle, clockwise: true)
        context?.fillPath()

        (...)
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = self.bounds
        gradientLayer.colors = [UIColor.red, UIColor.blue]
        self.layer.addSublayer(gradientLayer)
    

我在屏幕上看不到任何渐变(只有白色背景...)。 最后,我还尝试clip 保存其状态后的上下文,但我不确定我是否剪辑了任何内容,因为我没有看到任何渐变(在整个视图上或仅在片段上)。我阅读了文档,但并没有弄清楚(在我的情况下......)。

【问题讨论】:

你添加了 startPoint 和 endPoint 吗? 它实际上在没有起点/终点的情况下工作。定义颜色时我错过了 .cgcolor 。但我不知道如何将此渐变应用于图表的一部分(使用 .addArc 方法定义)。我无法从中获得视图或路径。有什么想法吗? 您应该编辑您的问题以反映您现在的要求...快速搜索找到此链接,这可能就是您所需要的:***.com/questions/23202228/… 我去看看。我一直在搜索很多互联网页面,但我没有找到这个。谢谢! 如果问题解决了,不要编辑问题来显示答案; 回答您自己的问题(在 Stack Overflow 上完全合法),几天后您可以接受您的回答以结束问题。如果这引发了一个新的问题,请将其作为一个单独的问题提出。 【参考方案1】:

cgColor 不见了……很抱歉给您带来不便。

let gradientLayer = CAGradientLayer()
gradientLayer.frame = self.bounds
gradientLayer.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]
self.layer.addSublayer(gradientLayer)

【讨论】:

无需道歉。我们都做到了。当您犯此错误时,您不会收到任何错误消息,并且一切都会默默地失败。太疯狂了!

以上是关于渐变层在视图中不可见的主要内容,如果未能解决你的问题,请参考以下文章

CFBundleUrlTypes 在 Info.plist 中可见,但在它的 XCode 视图中不可见

ExtJS 滑块在视图中不可见

Grails 控制器变量在视图中不可见

ConstraintLayout Barrier 在设计视图中不可见

虚拟图像路径在部分视图中不可见

滚动视图中的最后一个视图在我的选项卡活动中不可见