用Swift 3.0实时绘制一条线
我试图画一个UIImageView。 随着Swift 1.2,我能够得到它的工作,但我不得不将其转换为3.0,我不能得到它的工作。
它需要做的就是用你的手指画出你在屏幕上画的东西。
代码没有提供任何错误,只是不显示任何内容。
variables;
var lastPoint = CGPoint.zero var red: CGFloat = 0.0 var green: CGFloat = 0.0 var blue: CGFloat = 0.0 var brushWidth: CGFloat = 10.0 var opacity: CGFloat = 1.0 var swiped = false
代码;
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { swiped = false if let touch = touches.first { lastPoint = touch.location(in: self.view) } } func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint) { imageView.image?.draw(in: CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height)) UIGraphicsBeginImageContext(self.imageView.bounds.size); let context = UIGraphicsGetCurrentContext() context?.move(to: fromPoint) context?.addLine(to: toPoint) context?.setLineCap(CGLineCap.round) context?.setLineWidth(brushWidth) context?.setStrokeColor(red: red, green: green, blue: blue, alpha: 1.0) context?.setBlendMode(CGBlendMode.normal) imageView.image = UIGraphicsGetImageFromCurrentImageContext() imageView.alpha = opacity UIGraphicsEndImageContext() } override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { swiped = true if let touch = touches.first { let currentPoint = touch.location(in: view) drawLineFrom(fromPoint: lastPoint, toPoint: currentPoint) lastPoint = currentPoint } } override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { if !swiped { // draw a single point self.drawLineFrom(fromPoint: lastPoint, toPoint: lastPoint) }
您必须开始图像上下文:
UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0)
你也必须打破这个道路:
context?.strokePath()
你也没有画出前一个图像:
imageView.image?.draw(in: view.bounds)
从而:
func drawLine(from fromPoint: CGPoint, to toPoint: CGPoint) { UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0) imageView.image?.draw(in: view.bounds) let context = UIGraphicsGetCurrentContext() context?.move(to: fromPoint) context?.addLine(to: toPoint) context?.setLineCap(CGLineCap.round) context?.setLineWidth(brushWidth) context?.setStrokeColor(red: red, green: green, blue: blue, alpha: 1.0) context?.setBlendMode(CGBlendMode.normal) context?.strokePath() imageView.image = UIGraphicsGetImageFromCurrentImageContext() imageView.alpha = opacity UIGraphicsEndImageContext() }