【问题标题】:Swift - Using UIBezierPath in a Subview [closed]Swift - 在子视图中使用 UIBezierPath [关闭]
【发布时间】:2016-01-24 22:19:32
【问题描述】:

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

这是我的视图控制器类:

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

【问题讨论】:

    标签: swift uiview uiviewcontroller drawrect uibezierpath


    【解决方案1】:

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

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

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

    然后,在您的drawRect 中,在ballView 的边界内绘制 - 请记住,您现在绘制的是ballView 本身,而不是游戏视图: p>

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

    甚至更好:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2014-10-24
    • 2016-08-27
    • 1970-01-01
    相关资源
    最近更新 更多