问题描述
我已经根据下面的代码构建了一个绘图应用程序。当您画一条直线时,这些中断就会发生,如图所示。我为每个新行分配了随机的颜色,但在两次中断之间并没有改变颜色。
如果我在iOS 14之前的版本上进行测试,则不会发生此问题。
我无法解决此问题。我不明白是什么原因造成的。
从iOS 14开始的问题:
它是github i上由1992Shubham开发的DrawingApp,基于它,这是相关代码。
struct TouchPointsAndColor {
var color: UIColor?
var width: CGFloat?
var opacity: CGFloat?
var points: [CGPoint]?
init(color: UIColor,points: [CGPoint]?) {
self.color = color
self.points = points
}
}
class CanvasView: UIView {
var lines = [TouchPointsAndColor]()
var strokeWidth: CGFloat = 1.0
var strokeColor: UIColor = .black
var strokeOpacity: CGFloat = 1.0
override func draw(_ rect: CGRect) {
super.draw(rect)
guard let context = UIGraphicsGetCurrentContext() else {
return
}
lines.forEach { (line) in
for (i,p) in (line.points?.enumerated())! {
if i == 0 {
context.move(to: p)
} else {
context.addLine(to: p)
}
context.setStrokeColor(line.color?.withAlphaComponent(line.opacity ?? 1.0).cgColor ?? UIColor.black.cgColor)
context.setLineWidth(line.width ?? 1.0)
}
context.setLineCap(.round)
context.strokePath()
}
}
override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) {
lines.append(TouchPointsAndColor(color: UIColor(),points: [CGPoint]()))
}
override func touchesMoved(_ touches: Set<UITouch>,with event: UIEvent?) {
guard let touch = touches.first?.location(in: nil) else {
return
}
guard var lastPoint = lines.popLast() else {return}
lastPoint.points?.append(touch)
lastPoint.color = strokeColor
lastPoint.width = strokeWidth
lastPoint.opacity = strokeOpacity
lines.append(lastPoint)
setNeedsDisplay()
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)