gpt4 book ai didi

ios - 如何创建渐变三角形图像

转载 作者:可可西里 更新时间:2023-11-01 00:56:55 24 4
gpt4 key购买 nike

这是我必须创建一个渐变三角形(一个三角形,而不是纯色,而是具有颜色渐变的三角形)的代码:

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()!
ctx.saveGState()

//create gradient and draw it
let gradientPoints = [UIImage.GradientPoint(location: 0, color: UIColor.from(rgb: 0xff0000)), UIImage.GradientPoint(location: 1, color: UIColor.from(rgb: 0xd0d0d0))]
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())

//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.drawPath(using: .fill)

ctx.restoreGState()
let img = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()

return img
}
}

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

最佳答案

用这个替换你的代码,首先你需要添加路径,然后 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
}
}

结果

enter image description here

希望对你有帮助,祝好

关于ios - 如何创建渐变三角形图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45135919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com