2

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

我需要在 UIBezierPath 内绘制渐变并且无法使其工作。渐变在整个屏幕上绘制。

4

1 回答 1

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()
    }

}
于 2017-07-09T14:39:13.073 回答