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

标签 ios swift core-graphics

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

我使用了类似于确认答案的解决方案 here

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

我做错了什么?是否有更现代的方式或良好的第 3 方框架来创建平滑、简单的径向渐变?

谢谢!

我的代码(基于 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 and retina display

这将帮助您解决问题。

关于ios - Swift - 如何创建非像素化径向渐变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33754294/

相关文章:

ios - 用动画旋转图像,然后读取旋转

swift - Dictionary 在 Swift 中如何使用 Equatable 协议(protocol)?

iphone - 看到 malloc 分配大块内存 - 试图找出原因 (iPhone)

ios - 如何将 CGPaths 持久化到 CoreData

javascript - Cordova 脚本未执行

ios - - UIView 类别中的 awakeFromNib

ios - 从 IOS (Xcode) 使用 AWS token 自动售货机订阅 SNS 通知的步骤是什么?

ios - ViewController 禁用交互 - iOS

swift - 如何在 swift 中创建固定大小的二维数组

iphone - UIImageJPEGRepresentation() 线程安全吗?