Ios 如何创建渐变三角形图像

Ios 如何创建渐变三角形图像,ios,swift,core-graphics,Ios,Swift,Core Graphics,下面是我必须创建渐变三角形的代码(一个三角形,它不是平面颜色,而是有颜色渐变): 但是,返回的图像在背景中有一个正方形渐变,在其顶部有一个黑色三角形。我可以使填充清晰,但我不知道如何修剪路径周围的渐变层,以便只剩下一个三角形。如何修剪掉我绘制的路径之外的渐变层?用这个替换你的代码,首先你需要添加路径,然后ctx.clip()剪裁上下文,然后绘制渐变 import UIKit extension UIImage { struct GradientPoint { var

下面是我必须创建渐变三角形的代码(一个三角形,它不是平面颜色,而是有颜色渐变):


但是,返回的图像在背景中有一个正方形渐变,在其顶部有一个黑色三角形。我可以使填充清晰,但我不知道如何修剪路径周围的渐变层,以便只剩下一个三角形。如何修剪掉我绘制的路径之外的渐变层?

用这个替换你的代码,首先你需要添加路径,然后
ctx.clip()
剪裁上下文,然后绘制渐变

import UIKit

extension UIImage {

    struct GradientPoint {
        var location: CGFloat
        var color: UIColor
    }

    static func gradiatedTriangle(side: CGFloat)->UIImage {

        UIGraphicsBeginImageContextWithOptions(CGSize(width: side, height: side), false, 0)
        let ctx = UIGraphicsGetCurrentContext()!

        //draw triangle
        ctx.beginPath()
        ctx.move(to: CGPoint(x: side / 2, y: side))
        ctx.addLine(to: CGPoint(x: 0, y: 0))
        ctx.addLine(to: CGPoint(x: side, y: 0))
        ctx.closePath()
        ctx.clip()

        //create gradient and draw it
        let gradientPoints = [UIImage.GradientPoint(location: 0, color: UIColor.red), UIImage.GradientPoint(location: 1, color: UIColor.blue)]
        let gradient = CGGradient(colorSpace: CGColorSpaceCreateDeviceRGB(), colorComponents: gradientPoints.flatMap{$0.color.cgColor.components}.flatMap{$0}, locations: gradientPoints.map{$0.location}, count: gradientPoints.count)!
        ctx.drawLinearGradient(gradient, start: CGPoint.zero, end: CGPoint(x: 0, y: side), options: CGGradientDrawingOptions())


        let img = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()

        return img
    }
}
结果

希望这对你有帮助,祝你好运

import UIKit

extension UIImage {

    struct GradientPoint {
        var location: CGFloat
        var color: UIColor
    }

    static func gradiatedTriangle(side: CGFloat)->UIImage {

        UIGraphicsBeginImageContextWithOptions(CGSize(width: side, height: side), false, 0)
        let ctx = UIGraphicsGetCurrentContext()!

        //draw triangle
        ctx.beginPath()
        ctx.move(to: CGPoint(x: side / 2, y: side))
        ctx.addLine(to: CGPoint(x: 0, y: 0))
        ctx.addLine(to: CGPoint(x: side, y: 0))
        ctx.closePath()
        ctx.clip()

        //create gradient and draw it
        let gradientPoints = [UIImage.GradientPoint(location: 0, color: UIColor.red), UIImage.GradientPoint(location: 1, color: UIColor.blue)]
        let gradient = CGGradient(colorSpace: CGColorSpaceCreateDeviceRGB(), colorComponents: gradientPoints.flatMap{$0.color.cgColor.components}.flatMap{$0}, locations: gradientPoints.map{$0.location}, count: gradientPoints.count)!
        ctx.drawLinearGradient(gradient, start: CGPoint.zero, end: CGPoint(x: 0, y: side), options: CGGradientDrawingOptions())


        let img = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()

        return img
    }
}