Swift - 在子视图中使用 UIBezierPath

Swift - Using UIBezierPath in a Subview

我正在尝试制作一个简单的应用程序。为此,部分地,我尝试使用子视图在屏幕上绘制一个圆圈。

这是我的视图控制器class:

gameView 是故事板中链接的视图。 ballView 是我想添加的视图。

class GameViewController: UIViewController {

     @IBOutlet var gameView: UIView!
     var ballView = GameBallView()

    override func viewDidLoad() {
        super.viewDidLoad()

        gameView.addSubview(ballView)
        ballView.setNeedsDisplay()
        gameView.setNeedsDisplay()
   }
}


class GameBallView: UIView {

    override func drawRect(rect: CGRect) {
        let rectForBall = CGRect(x: 50, y: 250, width: 20, height: 20)
        let path = UIBezierPath(ovalInRect: rectForBall)
        path.fill()
        path.stroke()
    }
}

调用了 drawRect,但由于某种原因屏幕上没有显示任何内容。有谁知道我做错了什么?

您的 GameBallView ballView 未分配 frame。因此它的大小为零,默认为 CGRectZero 的框架矩形。 UIView 的指定初始化程序是 init(frame:) 是有充分理由的!大小为零的矩形是不可见的:它只是一个点,一个无穷小。

因此,您应该为该视图提供一些适合您的绘图的合理框架;例如:

 var ballView = GameBallView(frame:CGRectMake(50,250,20,20))

然后,在您的 drawRect 中,在 内部 绘制 ballView 的边界 — 请记住,您现在是相对于 ballView 本身,而不是游戏视图:

let rectForBall = CGRect(x: 0, y: 0, width: 20, height: 20)

甚至更好:

let rectForBall = rect // the parameter from `drawRect:`