Swift中如何指定颜色绘制路径/矩形?附Android实现参考
在Swift中实现双色填充+黑色描边的三角形
嘿,我来帮你把Android里的那个双色填充带描边的三角形效果搬到Swift里来!先解决你提到的两个基础问题,再给出完整的实现方案。
一、指定颜色绘制路径(描边/填充)
在Core Graphics里,绘制路径的描边和填充需要分别设置对应颜色,再调用对应的绘制方法:
- 设置描边颜色:用
setStrokeColor(_:),参数是CGColor类型,比如黑色可以写UIColor.black.cgColor - 设置填充颜色:用
setFillColor(_:),同样传入CGColor - 如果要同时实现描边+填充,可调用
drawPath(using: .fillStroke);也可以先填充再描边(顺序会影响视觉层叠效果)
二、指定颜色绘制矩形
绘制填充矩形有两种简洁方式:
- 用
UIColor的快捷方法直接填充:
UIColor.red.setFill() UIRectFill(targetRect)
- 用Core Graphics上下文的路径方式:
context.setFillColor(UIColor.green.cgColor) context.addRect(targetRect) context.fillPath()
三、完整复刻双色填充+黑色描边的三角形
结合你的Android逻辑,我们先绘制黑色描边的三角形路径,再裁剪到该路径范围内,最后分别填充上下两部分的矩形。完整代码如下:
override func draw(_ rect: CGRect) { guard let context = UIGraphicsGetCurrentContext() else { return } // 1. 创建并闭合三角形路径 context.beginPath() context.move(to: CGPoint(x: rect.minX, y: rect.maxY)) context.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY)) context.addLine(to: CGPoint(x: rect.midX, y: rect.minY)) context.closePath() // 闭合路径确保描边无缺口 // 2. 绘制黑色描边 context.setStrokeColor(UIColor.black.cgColor) context.setLineWidth(2) // 可根据需求调整描边宽度 context.strokePath() // 3. 重新创建三角形路径并裁剪,限制后续绘制范围 context.beginPath() context.move(to: CGPoint(x: rect.minX, y: rect.maxY)) context.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY)) context.addLine(to: CGPoint(x: rect.midX, y: rect.minY)) context.closePath() context.clip() // 4. 计算上下两部分的矩形范围(这里按中线分割,可自定义比例) let topRect = CGRect(x: rect.minX, y: rect.minY, width: rect.width, height: rect.height / 2) let bottomRect = CGRect(x: rect.minX, y: rect.minY + rect.height / 2, width: rect.width, height: rect.height / 2) // 5. 填充红色上半部分 UIColor.red.setFill() UIRectFill(topRect) // 6. 填充绿色下半部分 UIColor.green.setFill() UIRectFill(bottomRect) }
关键细节说明:
- 闭合路径:调用
closePath()能让三角形的三条边完整连接,避免描边出现缺口 - 裁剪路径:因为要让矩形只在三角形内显示,所以需要重新创建一次三角形路径并调用
clip(),后续所有绘制都会被限制在这个路径范围内 - 矩形分割:示例里按中线分割三角形高度,你可以根据需求调整上下部分的比例,比如自定义分割点位置
内容的提问来源于stack exchange,提问作者user924
相关产品推荐
相关产品推荐

