NSGradient drawInBezierPath iOS等价物

时间:2013-05-21 16:13:46

标签: ios gradient

是否有相当于- (void)drawInBezierPath:(NSBezierPath *)path angle:(CGFloat)angle的iOS?

我需要在UIBezierPath中绘制渐变,但无法使其工作。渐变在整个屏幕上绘制。

1 个答案:

答案 0 :(得分:0)

此示例在Swift 3中的UIBezierPath内创建一个渐变。它绘制一条带有绿色/白色渐变的斜线。

import UIKit

class DrawingView: UIView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.isOpaque = false
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }


    override func draw(_ rect: CGRect) {
        let startPoint = CGPoint(x:100, y:100)
        let endPoint = CGPoint(x: 300, y:400)

        let context = UIGraphicsGetCurrentContext()!
        context.setStrokeColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0);
        // create a line
        context.move(to: startPoint)
        context.addLine(to: endPoint)
        context.setLineWidth(4)
        // use the line created above as a clipping mask
        context.replacePathWithStrokedPath()
        context.clip()

        // create a gradient
        let locations: [CGFloat] = [ 0.0, 0.5 ]

        let colors = [UIColor.green.cgColor,
                      UIColor.white.cgColor]

        let colorspace = CGColorSpaceCreateDeviceRGB()

        let gradient = CGGradient(colorsSpace: colorspace,
                                  colors: colors as CFArray, locations: locations)

        let gradientStartPoint = CGPoint(x: rect.midX, y: rect.minY)
        let gradientEndPoint = CGPoint(x: rect.midX, y: rect.maxY)

        context.drawLinearGradient(gradient!,
                                    start: gradientStartPoint, end: gradientEndPoint,
                                    options: .drawsBeforeStartLocation)
        UIGraphicsEndImageContext()
    }

}