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

Swift中CGContextAddLineToPoint不可用,如何用move(to:)替代?

替换旧CGContext绘图方法为Swift新API的解决方案

在Swift中,CGContextMoveToPoint和CGContextAddLineToPoint这类Objective-C风格的API已被更简洁的面向对象实例方法替代,直接按照报错提示使用move(to:)和addLine(to:)即可,具体替换方式如下:

核心替换规则

  • CGContextMoveToPoint(context, x, y) → context.move(to: CGPoint(x: x, y: y))
  • CGContextAddLineToPoint(context, x, y) → context.addLine(to: CGPoint(x: x, y: y))

修改后的完整代码

注意原代码存在循环变量名不匹配的问题(循环用i但实际使用x),这里统一修正,同时优化可选类型处理避免崩溃:

// 先安全获取font,避免强制解包崩溃
guard let font = self.font else { return }

for x in aerr {
    // 计算线条的Y轴位置
    let yPosition = font.lineHeight * CGFloat(x) + baselineOffset
    // 定义起点和终点
    let startPoint = CGPoint(x: self.bounds.origin.x, y: yPosition)
    let endPoint = CGPoint(x: self.bounds.size.width, y: yPosition)
    
    // 使用新API移动路径起点
    context.move(to: startPoint)
    // 添加线条到终点
    context.addLine(to: endPoint)
}

// 必须调用此方法才能让线条绘制到画布上
context.strokePath()

额外说明

  1. 原代码中的强制解包self.font!存在崩溃风险,建议用guard let或if let进行可选绑定
  2. 若循环变量实际为i,需将CGFloat(x)改为CGFloat(i)
  3. 最后必须调用strokePath()才能执行绘制操作,否则路径只会被定义不会显示

内容的提问来源于stack exchange,提问作者Krunal Nagvadia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:45:39