我正在尝试为绘图应用设置橡皮擦工具。我一直关注this tutorial的基础知识,但图纸是在白色背景下进行的,因此删除部分未被覆盖(它们以白色绘制以删除)
我一直在实施一种方法来删除我的绘图,它的效果非常好。我绘制一个圆圈,设置颜色和混合模式以清除并设置我想要绘制该圆圈的路径。然后我得到一个方法UIGraphicsGetImageFromCurrentImageContext()
返回的图像,它更新了我当前的图像,并在其上面绘制了新图形。
绘制的圆圈它正在完成它的工作并删除它所绘制的位置。但问题是图像开始从右到左被删除,覆盖了它的所有高度,这肯定没有设置在我的代码中的任何地方。
我不知道这是不是一个错误。
我已经尝试了所有内容,但是如果没有右侧的新删除行,我无法从上下文中获取新图像。我画的越多,新线的增长就越多。
正如你在gif中看到的那样,我看起来像是在白色背景上画灰色,但白色是一个充满白色的图像,它的背景颜色它是灰色的,所以我要删除。 代码:
在UIView(蓝色背景)中,我初始化并添加两个白色列作为子视图:
func addNewColumn(){
let column : Column = Column.init(frame: CGRect(x: self.frame.size.width*0.7, y: 0, width: self.frame.size.width*0.125, height: self.frame.size.height))
let column2 : Column = Column.init(frame: CGRect(x: self.frame.size.width*0.2, y: 0, width: self.frame.size.width*0.125, height: self.frame.size.height))
self.addSubview(column)
self.addSubview(column2)
}
在类中初始化列:
import UIKit
class Column: UIImageView {
//Touches Positions
var firstPoint : CGPoint?
var lastPoint : CGPoint?
override init(frame: CGRect) {
super.init(frame: frame)
self.isUserInteractionEnabled = true
self.draw(frame)
self.backgroundColor = UIColor.gray
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
//Drawing of the white color in the image, over the blue background
override func draw(_ rect: CGRect) {
UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, 0)
let context = UIGraphicsGetCurrentContext()
context?.setFillColor(UIColor.white.cgColor)
context?.setBlendMode(.normal)
context?.fill(self.bounds)
self.image = UIGraphicsGetImageFromCurrentImageContext()
self.alpha = 1
UIGraphicsEndImageContext()
}
//The method called from touchesMoved() to delete the white color
func eraseColumn() {
UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, 0)
let context = UIGraphicsGetCurrentContext()
self.image?.draw(in: self.bounds)
context?.beginPath()
context?.addEllipse(in: CGRect(x: (lastPoint?.x)!, y: (lastPoint?.y)!, width: 10, height: 10))
context?.setLineCap(.round)
context?.setLineWidth(10)
context?.setStrokeColor(UIColor.clear.cgColor)
context?.setBlendMode(.clear)
context?.strokePath()
context?.closePath()
self.image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
}
//Touches handling
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
firstPoint = touch?.location(in: self)
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
lastPoint = touch?.location(in: self)
eraseColumn()
}
}
正如您在draw(_ rect: CGRect)
方法中看到的那样,我用白色填充图像并将其背景颜色设置为灰色。
在eraseColumn()
方法中,我删除了用户触摸的白色。无论我尝试什么,图像都会被删除。我根本不知道为什么会这样。
任何帮助将非常感激。
项目是快速3,X-Code 9.2。
答案 0 :(得分:0)
终于找到了解决方案
更改
self.image?.draw(in: self.bounds)
到
self.image?.draw(at: self.bounds.origin)
解决了这个问题。希望它会对某人有所帮助。
干杯