我一直致力于能够使用swift 3. 0在图像视图上绘制红线,并遇到了一些问题。正如你所猜到的,我使用了一些来自堆栈溢出的代码来帮助我进行第一次尝试,并且得到了一个奇怪的bug。
当我在imageview上拖动手指时,它确实会画出一条红线,但对于每一个“帧”,它会把我在屏幕上进一步画下的所有东西都掉下来。所以当我画的时候,看起来我画的线在下降,然后完全离开屏幕。
我正在寻找的是能够简单地绘制图像视图,而不是每帧向下移动的一切,我想它保持在相同的位置,类似于它如何在所有绘图应用程序等工作。
下面是所有的代码:
@IBOutlet weak var mainImageView: UIImageView!
var lastPoint = CGPoint.zero
var fromPoint = CGPoint();
var toPoint = CGPoint.zero
var red: CGFloat = 255.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 viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint)
{
UIGraphicsBeginImageContextWithOptions(self.mainImageView.bounds.size, false, 0);
mainImageView.image?.draw(in: CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height))
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()
mainImageView.image = UIGraphicsGetImageFromCurrentImageContext()
mainImageView.alpha = opacity
UIGraphicsEndImageContext()
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
swiped = false;
if let touch = touches.first {
lastPoint = touch.location(in: self.mainImageView)
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
swiped = true;
if let touch = touches.first {
let currentPoint = touch.location(in: mainImageView)
drawLineFrom(fromPoint: lastPoint, toPoint: currentPoint)
lastPoint = currentPoint
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if(!swiped){
self.drawLineFrom(fromPoint: lastPoint, toPoint: lastPoint)
}
}
字符串
谢谢你们的帮助!
3条答案
按热度按时间hgncfbus1#
下面的代码可以使用触摸绘制图像(Swift 3.0)
字符串
im9ewurl2#
下面的代码,你可以绘制图像使用触摸
字符串
093gszye3#
Swift 5.7.2解决方案
字符串