Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS10 Swift 3-简单绘图画布_Ios_Swift_Canvas_Swift3 - Fatal编程技术网

iOS10 Swift 3-简单绘图画布

iOS10 Swift 3-简单绘图画布,ios,swift,canvas,swift3,Ios,Swift,Canvas,Swift3,我正在使用Swift 3构建一个iOS应用程序,我的应用程序中有一个部分需要两个“Sign here”字段作为画布。只有一种颜色(黑色)和一个“重置”按钮 到目前为止,我已经看到,它是在旧版本的Swift上,但有人将其更新为Swift 3 我复制粘贴了ViewController.swift文件中的所有内容,但我注释掉了最后两个函数override func prepare和ViewController:SettingsViewControllerDelegate,因为我不需要它们 它按预期工作

我正在使用Swift 3构建一个iOS应用程序,我的应用程序中有一个部分需要两个“Sign here”字段作为画布。只有一种颜色(黑色)和一个“重置”按钮

到目前为止,我已经看到,它是在旧版本的Swift上,但有人将其更新为Swift 3

我复制粘贴了
ViewController.swift
文件中的所有内容,但我注释掉了最后两个函数
override func prepare
ViewController:SettingsViewControllerDelegate
,因为我不需要它们

它按预期工作,笔划得到保存

但是,我现在有两个问题:

  • 这些线绘制在接触点的右侧
  • 我不确定如何使它适用于另一组ImageView 正如您在这张图中所看到的,出于某种原因,绘制的线出现在光标所在位置的右侧。转换后的原始代码并非如此:

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

    我担心的另一个问题是,代码似乎是这样工作的:

    detect touch -> draw on imageview
    
    如果这是一种方法,那么如果任何触摸只会在一个图像视图上绘制,我应该如何处理两个图像视图

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

    我目前有两个问题:

  • 处理光标与实际绘制线的位置之间的“偏移”,以及如何处理多张画布

  • 转换


  • 明白了。我将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)
        }
    
    }