我正在参与「启航方案」

前言

Core Graphics(又称为Quartz)是iOS开发中的一个绘图结构,用于在屏幕上制作2D图形和进行图画处理。它供给了一组强大的图形制作和处理函数,能够创立各种形状、途径、突变、图画、文本等,并进行改换、组合、裁剪等操作。

图形上下文(CGContext):

CGContext是Core Graphics的制作环境,用于描绘和办理制作操作。能够创立CGContext实例,并将其与方针制作表面相关联,然后运用制作函数制作图形。

class TestView: UIView {
    override func draw(_ rect: CGRect) {
        guard let context = UIGraphicsGetCurrentContext() else { return }
        // 设置制作参数
        context.setFillColor(UIColor.red.cgColor)
        context.setStrokeColor(UIColor.blue.cgColor)
        context.setLineWidth(2.0)
        // 创立途径
        let path = UIBezierPath()
        path.move(to: CGPoint(x: 50, y: 50))
        path.addLine(to: CGPoint(x: 150, y: 150))
        path.addQuadCurve(to: CGPoint(x: 250, y: 50), controlPoint: CGPoint(x: 150, y: 0))
        // 将途径添加到上下文并制作
        context.addPath(path.cgPath)
        context.fillPath()
        context.strokePath()
    }
}
class XSWCoreGraphicsViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        let testView = TestView(frame: CGRect(x: 0, y: 100, width: 300, height: 300))
        testView.backgroundColor = .white
        view.addSubview(testView)
    }
}

iOS - 浅谈Core Graphics

制作根本形状

Core Graphics供给了制作根本形状的函数,如制作线段、矩形、圆形、椭圆等。能够设置边框、填充颜色、线条款式等特点来自定义形状的外观。

guard let context = UIGraphicsGetCurrentContext() else { return }
context.setStrokeColor(UIColor.red.cgColor)
context.setLineWidth(2.0)
context.addRect(CGRect(x: 50, y: 50, width: 100, height: 100))
context.strokePath()

iOS - 浅谈Core Graphics

途径制作

能够运用途径(CGPath)来描绘和制作复杂的形状,如曲线、多边形等。能够添加直线段、曲线段、弧线段比及途径中,并设置制作特点和款式。

guard let context = UIGraphicsGetCurrentContext() else { return }
context.setStrokeColor(UIColor.blue.cgColor)
context.setLineWidth(2.0)
let path = UIBezierPath()
path.move(to: CGPoint(x: 50, y: 50))
path.addLine(to: CGPoint(x: 150, y: 150))
path.addQuadCurve(to: CGPoint(x: 250, y: 50), controlPoint: CGPoint(x: 150, y: 0))
context.addPath(path.cgPath)
context.strokePath()

iOS - 浅谈Core Graphics

突变和图画填充

Core Graphics支持突变填充和图画填充。能够创立线性突变、径向突变、色彩空间和图画目标,并将其运用于形状或途径的填充或边框。

guard let context = UIGraphicsGetCurrentContext() else { return }
let colors = [UIColor.red.cgColor, UIColor.yellow.cgColor]
let colorSpace = CGColorSpaceCreateDeviceRGB()
let gradient = CGGradient(colorsSpace: colorSpace, colors: colors as CFArray, locations: nil)
let startPoint = CGPoint(x: 0, y: 0)
let endPoint = CGPoint(x: rect.width, y: rect.height)
context.drawLinearGradient(gradient!, start: startPoint, end: endPoint, options: [])

iOS - 浅谈Core Graphics

图画处理

Core Graphics供给了一些图画处理功用,如图画缩放、裁剪、旋转、颜色处理等。能够运用CGImage和CGDataProvider来表明和操作图画数据。

guard let context = UIGraphicsGetCurrentContext() else { return }
if let image = UIImage(named: "风景.jpg") {
    let imageRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
    context.draw(image.cgImage!, in: imageRect)
}

iOS - 浅谈Core Graphics

文本制作

能够运用Core Graphics制作文本,并设置字体、字号、颜色、对齐方法等特点。还能够进行文本布局和途径文本制作。

guard let context = UIGraphicsGetCurrentContext() else { return }
let text = "Hello, World!"
let font = UIFont.systemFont(ofSize: 20)
let attributes = [NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: UIColor.black]
let attributedText = NSAttributedString(string: text, attributes: attributes)
attributedText.draw(at: CGPoint(x: 50, y: 50))

iOS - 浅谈Core Graphics

图形改换

Core Graphics供给了图形改换的功用,如平移、旋转、缩放、翻转等。能够经过设置改换矩阵来运用改换操作。

// 图形改换:
guard let context = UIGraphicsGetCurrentContext() else { return }
// 创立一个矩形途径
let rectPath = UIBezierPath(rect: CGRect(x: 50, y: 50, width: 100, height: 100))
// 保存当前图形上下文状况
context.saveGState()
// 创立一个仿射改换,进行平移、旋转和缩放改换
var transform = CGAffineTransform.identity
transform = transform.translatedBy(x: 200, y: 200)
transform = transform.rotated(by: CGFloat.pi / 4)
transform = transform.scaledBy(x: 1.5, y: 1.5)
// 将改换运用到途径上
rectPath.apply(transform)
// 将途径添加到上下文中并制作
context.addPath(rectPath.cgPath)
context.setFillColor(UIColor.red.cgColor)
context.fillPath()
// 恢复图形上下文到之前保存的状况
context.restoreGState()

iOS - 浅谈Core Graphics

结尾

Core Graphics是一个底层的绘图结构,运用时需要手动办理绘图上下文、途径、资源等,对功能和内存的运用也需要留意。在实际开发中,也能够考虑运用更高档的绘图库和结构,如UIKit和Core Animation,它们供给了更简略、易用的接口来完成常见的绘图和动画作用。

上面只是Core Graphics 的很小一部分特性,实际能够依据需求进行进一步探索和运用。