Swift-如何创建非像素化的径向渐变



我正在尝试为我的应用程序创建一个径向/圆形渐变。

我在这里使用了一个类似于已确认答案的解决方案

但是,生成的渐变看起来是像素化的。

我做错了什么?有没有更现代的方法或更好的第三方框架来创建平滑、简单的径向梯度?

谢谢!

我的代码(基于Stack Overflow上发布的片段):

class RadialGradientLayer: CALayer {
    init(innerColor: UIColor, outerColor: UIColor) {
        self.innerColor = innerColor.CGColor
        self.outerColor = outerColor.CGColor
        super.init()
        needsDisplayOnBoundsChange = true
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("This class does not support NSCoding")
    }
    var innerColor: CGColor
    var outerColor: CGColor
    override func drawInContext(ctx: CGContext) {
        CGContextSaveGState(ctx)
        let colorSpace = CGColorSpaceCreateDeviceRGB()
        let locations:[CGFloat] = [0.0, 1.0]
        let colors = [innerColor, outerColor]
        let gradient = CGGradientCreateWithColors(colorSpace, colors, locations)
        let center = CGPoint(x: bounds.width / 2.0, y: bounds.height / 2.0)
        let radius = min(bounds.width / 2.0, bounds.height / 2.0)
        CGContextDrawRadialGradient(ctx, gradient, center, 0.0, center, radius, CGGradientDrawingOptions(rawValue: 0))
    }
}

您需要确保为设备屏幕缩放CGContext

看看这个问题的答案-CGContext和视网膜显示

这将帮助您解决问题。

最新更新