Swift中调用dash_line后continuous_Line绘制实线变虚线的问题问询
解决Swift中虚线绘制影响后续实线的问题
问题出在CGContext的绘图状态是全局共享的——你在dash_line函数中设置了虚线样式后,没有重置这个状态,导致后续所有绘图操作都会继承这个虚线配置。
只需要在修改绘图状态前保存当前Context的状态,绘制完成后恢复即可,具体修改如下:
// 保存当前Context的所有绘图状态 context_dash.saveGState() context_dash.setStrokeColor(color!.cgColor) context_dash.setLineWidth(strokeWidth) let dashArray:[CGFloat] = [d1,d2,d3,d4] context_dash.setLineDash(phase: strokeWidth, lengths: dashArray) context_dash.move(to: CGPoint(x: p1.x, y: p1.y)) context_dash.addLine(to: CGPoint(x: p2.x, y: p2.y)) context_dash.drawPath(using: CGPathDrawingMode.stroke) // 恢复到保存时的Context状态,清除自定义的虚线配置 context_dash.restoreGState()
saveGState()会把当前Context的所有绘图参数(包括线条样式、颜色、宽度等)暂存起来,restoreGState()则会将Context恢复到保存时的初始状态,这样后续调用continuous_Line时,就会使用默认的实线样式,不会被之前的虚线设置干扰。
内容的提问来源于stack exchange,提问作者Xin Lok
相关产品推荐
相关产品推荐

