###やってみたいこと
このdraw関数で描画した紫のボールを1秒ごとに右にずらしていくコード(Javaでいうバウンドするボール的なアレ)をSwiftで実装しています。
draw関数でボールを描画して、while文で円の更新をしていくコードを描きたいのですが、
下記のコードを書くと、printコンソールの結果が
150 151 152 ... (以下略)
と表示されるのですが、円は表示されず画面が白紙のままです。
ViewController.swift
1import UIKit 2 3var x: Int = 150 4var y: Int = 150 5 6class DrawView: UIView { 7 8 override init(frame: CGRect) { 9 super.init(frame: frame) 10 self.backgroundColor = UIColor.clear 11 } 12 13 required init?(coder aDecoder: NSCoder) { 14 fatalError("init(coder:) has not been implemented") 15 } 16 17 override func draw(_ rect: CGRect) { 18 19 print(x) 20 21 while x > 0 { 22 23 let circle = UIBezierPath(arcCenter: CGPoint(x:x, y:y), radius: 10, startAngle: 0, endAngle: CGFloat(Double.pi)*2, clockwise: true) 24 UIColor(red: 0, green: 0, blue: 1, alpha: 0.3).setFill() 25 circle.fill() 26 27 x = x+1 28 print(x) 29 sleep(1) 30 31 } 32 33 } 34 35} 36 37class ViewController: UIViewController { 38 39 override func viewDidLoad() { 40 super.viewDidLoad() 41 42 let drawView = DrawView(frame: self.view.bounds) 43 self.view.addSubview(drawView) 44 45 } 46 47} 48
###教えていただきたいこと
① 処理を実装するにはどうしたらいいか
② draw関数のコードは一度しか呼ばれないのか
③ circleがlet関数だからそもそもいくつも円を描画するのは無理なのか
どれか一つでもいいので、教えていただけると幸いです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/29 05:19