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()
额外说明
- 原代码中的强制解包
self.font!存在崩溃风险,建议用guard let或if let进行可选绑定 - 若循环变量实际为
i,需将CGFloat(x)改为CGFloat(i) - 最后必须调用
strokePath()才能执行绘制操作,否则路径只会被定义不会显示
内容的提问来源于stack exchange,提问作者Krunal Nagvadia
相关产品推荐
相关产品推荐

