2017-06-14 5 views
1

私はすぐに詰まっているように見えるようにしようとしています。 誰かが{ didSet { setNeedsDisplay() } }がうまくいかない理由を指摘できますか? 目標は、ユーザーがここ をタップ小さな円を描くようにあることは私のコントローラである:あなたの回答を楽しみにしていスイフト(GRect)を複数回コールすることを管理していない

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() 

} 

}

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 

    } 

} 

そしてここでは、私の見解です。

EDIT:今後の参考のため

誰かがミスが、ディスプレイがPointsAndLinesViewのサブクラスであるとNOTのUIView

のとdisplay.pointが設定されるべきであることを、

だった、それを必要とする場合には。

+0

私は間違っているかもしれませんが、 'setNeedsDisplay'は' bool'引数を取っていませんか? – Arc676

+0

ブールは必要ありません。空の場合はビュー全体が無効になりますが、CGRectを渡してビューの領域を無効にすることができます。 –

答えて

0

コードを見ると、ポイントアンドラインコントロールをビューに追加したことがないので、表示されません。それをメインビューのサブビューとして追加して、そのフレームを手動で設定するか、自動レイアウトを使用して配置します。

+0

drawメソッドは1回実行され、1つの円が表示されます。私はまた、タップの場所を取得します。私は再描画できません。 – Thodoris

+0

pointsAndLinesプロパティをビューに追加するコードを表示できますか?私はそれを追加し、それをサイズする場合、それは私のために正しく動作します。また、表示ビューでユーザー対話が有効になっていることを確認します。 –

関連する問題