2017-10-09 92 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) 
    } 

}