You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何指定颜色绘制路径/矩形?附Android实现参考

在Swift中实现双色填充+黑色描边的三角形

嘿,我来帮你把Android里的那个双色填充带描边的三角形效果搬到Swift里来!先解决你提到的两个基础问题,再给出完整的实现方案。

一、指定颜色绘制路径(描边/填充)

在Core Graphics里,绘制路径的描边和填充需要分别设置对应颜色,再调用对应的绘制方法:

  • 设置描边颜色:用setStrokeColor(_:),参数是CGColor类型,比如黑色可以写UIColor.black.cgColor
  • 设置填充颜色:用setFillColor(_:),同样传入CGColor
  • 如果要同时实现描边+填充,可调用drawPath(using: .fillStroke);也可以先填充再描边(顺序会影响视觉层叠效果)

二、指定颜色绘制矩形

绘制填充矩形有两种简洁方式:

  1. 用UIColor的快捷方法直接填充:
UIColor.red.setFill()
UIRectFill(targetRect)
  1. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:10:39