2017-10-09 94 views
-1

我正在使用Swift 3构建iOS应用程序,并且在我的应用程序中有一部分需要两个“签入此处”字段,这将成为画布。只会有一种颜色(黑色)和一个“重置”按钮。iOS10 Swift 3 - 简单绘图画布

到目前为止,我已经看到了this tutorial,它是在一个旧版本的雨燕,但有人更新,以斯威夫特3,here is the code.

我复制粘贴一切都在ViewController.swift文件,但我注释掉最后两个功能override func prepareViewController:SettingsViewControllerDelegate因为我不需要这些。

它按预期工作,笔画被保存。

不过,我有2个问题,它现在:

  1. 线被描绘为触摸点的权利。
  2. 我不确定如何使其适用于另一组图像浏览。

正如你在这里看到的,由于某种原因,画出的线出现在我有光标的地方。这种行为是不是为转换的原始代码的情况:

enter image description here

我无法现在来测试这个在实际设备上。但是这种奇怪的行为不在转换后的原始代码上。

另一个值得关注的我是,这是怎样的代码似乎工作:

detect touch -> draw on imageview 

如果是这种方法,那么我应该如何处理两个imageViews如果任何触摸将借鉴只是一个?

我认为这个方法应该是从UIView中扩展一个类来覆盖draw函数。我看到一个这样的代码here.然而,它是在旧的Swift上编写的,我不知道如何翻译或更新它。我尝试使用XCode的“自动更正”功能,但我遇到了障碍。

所以现在,我有两个问题需要帮助。任何答案都会很有帮助。

  1. 处理光标与实际绘制线的位置之间的“偏移”,以及如何处理超过1个画布。

  2. 转换this code to Swift 3

任何帮助和指导将非常感激。

回答

-1

明白了。我将DrawableView类转换为Swift 3.

请指出,如果我做了任何错误,会导致应用程序在w/e的扩展使用中崩溃。

class DrawableView: UIView { 

    let path=UIBezierPath() 
    var previousPoint:CGPoint 
    var lineWidth:CGFloat=1.0 
    // Only override drawRect: if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    override init(frame: CGRect) { 
     previousPoint=CGPoint.zero 
     super.init(frame: frame) 

    } 

    required init?(coder aDecoder: NSCoder) { 
     previousPoint=CGPoint.zero 
     super.init(coder: aDecoder) 

     let panGestureRecognizer=UIPanGestureRecognizer(target: self, action: #selector(pan)) 
     panGestureRecognizer.maximumNumberOfTouches=1 

     self.addGestureRecognizer(panGestureRecognizer) 

    } 

    override func draw(_ rect: CGRect) { 
     // Drawing code 
     UIColor.green.setStroke() 
     path.stroke() 
     path.lineWidth=lineWidth 
    } 

    func pan(panGestureRecognizer:UIPanGestureRecognizer)->Void{ 
     let currentPoint=panGestureRecognizer.location(in: self) 
     let midPoint=self.midPoint(p0: previousPoint, p1: currentPoint) 


     if panGestureRecognizer.state == .began{ 
      path.move(to: currentPoint) 
     } 
     else if panGestureRecognizer.state == .changed{ 
      path.addQuadCurve(to: midPoint,controlPoint: previousPoint) 
     } 

     previousPoint=currentPoint 
     self.setNeedsDisplay() 
    } 

    func midPoint(p0:CGPoint,p1:CGPoint)->CGPoint{ 
     let x=(p0.x+p1.x)/2 
     let y=(p0.y+p1.y)/2 
     return CGPoint(x: x, y: y) 
    } 

}