Swift - 在子视图中使用UIBezierPath

时间:2016-01-24 22:19:33

标签: swift uiview uiviewcontroller drawrect uibezierpath

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

这是我的视图控制器类:

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,但由于某种原因屏幕上没有显示任何内容。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的GameBallView Option<&str>已被分配为ballView。因此它的大小为零,默认为CGRectZero的框架矩形。有一个很好的理由为什么UIView的指定初始化器是frame!零大小的矩形是不可见的:它只是一个点,一个无穷小。

因此,你应该给这个观点一些合理的框架,以适应你的绘画;例如:

init(frame:)

然后,在 var ballView = GameBallView(frame:CGRectMake(50,250,20,20)) 中,在<{1}}中绘制内部 - 请记住,您现在正在绘制drawRect本身,而不是游戏视图:

ballView

甚至更好:

ballView