【发布时间】:2026-02-08 13:15:01
【问题描述】:
我写了一个自定义的UIView,我发现了一个奇怪的问题。我认为这与一个非常基本的概念有关,但我就是不明白,sigh.....
class ArrowView: UIView {
override func draw(_ rect: CGRect) {
let arrowPath = UIBezierPath.bezierPathWithArrowFromPoint(startPoint: CGPoint(x:bounds.size.width/2,y:bounds.size.height/3), endPoint: CGPoint(x:bounds.size.width/2, y:bounds.size.height/3*2), tailWidth: 8, headWidth: 24, headLength: 18)
let fillColor = UIColor(red: 0.00, green: 0.59, blue: 1.0, alpha: 1.0)
fillColor.setFill()
arrowPath.fill()
}
}
这段代码可以正常工作,但是如果我从覆盖绘制函数中抓取了这条线,它就不会编译。错误说我不能使用 bounds 属性。
let arrowPath = UIBezierPath.bezierPathWithArrowFromPoint(startPoint: CGPoint(x:bounds.size.width/2,y:bounds.size.height/3), endPoint: CGPoint(x:bounds.size.width/2, y:bounds.size.height/3*2), tailWidth: 8, headWidth: 24, headLength: 18)
不能在属性初始化器中使用实例成员“边界”;属性初始化器在“self”可用之前运行
我不明白为什么我不能在 func draw 之外使用这个边界
【问题讨论】:
-
你可以通过使用计算属性Example of Computed Property来解决这个问题