2017-06-14 22 views
1

我正在嘗試學習swift bu,看來我已經卡住了。 有人可以指出爲什麼{ didSet { setNeedsDisplay() } }似乎不工作?! 我們的目標是在用戶點擊 這裏是我的控制器,以畫小圈:Swift不會調用繪製(GRect)不止一次

import UIKit 


class ViewController: UIViewController { 

@IBOutlet weak var display: UIView!{ 

    didSet{ 

     display.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(addCirclePoint(byReactingTo:)))) 

    } 

} 

    let pointsAndLines = PointsAndLinesView() 

    func addCirclePoint(byReactingTo tapRecognizer: UITapGestureRecognizer){ 
    let point = tapRecognizer.location(in: display) 
     pointsAndLines.point = point 

    } 

} 

這裏是我的看法:

import UIKit 


class PointsAndLinesView: UIView { 

var point = CGPoint(){ didSet{ setNeedsDisplay() } } 


private func addCirclePoint()->UIBezierPath{ 

    let circlePoint = UIBezierPath(arcCenter: point, radius: 5.0, startAngle: 0, endAngle: 2 * CGFloat.pi, clockwise: true) 
    circlePoint.lineWidth = 4 
    print("Did I run?!") 
    return circlePoint 

} 

override func draw(_ rect: CGRect) { 

    UIColor.black.set() 

    addCirclePoint().stroke() 

} 

}

期待您的答覆。

編輯:

對於萬一有人備查需要它的錯誤是,

的顯示是PointsAndLinesView的子類,不是UIView的

和display.point應設置。

+0

我可能是錯的,但'setNeedsDisplay'沒有'bool'參數? – Arc676

+0

沒有布爾需要。如果爲空,則整個視圖失效,但您可以傳遞CGRect以使視圖區域無效。 –

回答

0

看着你從未將pointsAndLines控件添加到視圖中的代碼,所以你永遠不會看到它。您可以將其添加爲主視圖的子視圖,然後手動設置它的框架或使用自動佈局來定位它。

+0

繪製方法執行一次,我看到一個圓圈。我也會得到水龍頭的位置。我無法重繪。 – Thodoris

+0

您可以顯示代碼將pointsAndLines屬性添加到視圖的代碼。如果我添加並調整它的大小,那麼它對我來說是正確的。還要確保顯示視圖啓用了用戶交互。 –