下面是我的一个简单自定义 View 的 drawRect 函数。当我使用
var h: CGFloat = 200
View 本身正确显示:矩形的一部分是黑色的,一部分是红色的。但是当我使用
var h: CGFloat = fractionalHeight*parentViewHeight
我得到的只是一个黑色矩形。如果 fractionalHeight
( View 的属性)
是 0.5,矩形的一半应该是红色的。打印语句证实了这个事实
h是我认为应该的。嗯嗯?怎么回事?
override func drawRect(rect: CGRect)
{
var ctx = UIGraphicsGetCurrentContext()
CGContextClearRect(ctx, rect);
let parentViewBounds = self.bounds
let parentViewWidth = CGRectGetWidth(parentViewBounds)
let parentViewHeight = CGRectGetHeight(parentViewBounds)
println ("w,h = \(parentViewWidth),\(parentViewHeight) ")
// CGContextClearRect(ctx, rect);
CGContextSetRGBFillColor(ctx, 0.0, 0.0, 0.0, 1); // black
CGContextFillRect(ctx, CGRectMake(0, 0, parentViewWidth, parentViewHeight));
println("in drawRect, fractionalHeight = \(fractionalHeight)")
var h: CGFloat = 200 // fractionalHeight*parentViewHeight
CGContextSetRGBFillColor(ctx, 1.0, 0.0, 0.0, 1); // red
CGContextFillRect(ctx, CGRectMake(0, 0, parentViewWidth, h))
println("in drawRect, h = \(h)")
}
最佳答案
我相信您正在与 2 个不同的 OCIndicator 实例对话。
我相信您有一个 OCIndicator(可能在您的 StoryBoard 中)连接到您的 ViewController
中的 IBOutlet。
在 viewDidLoad
中,您正在创建 OCIndicator 的第二个实例并将其分配给局部变量 indicator
并将其添加到您的 subView
这是掩盖了第一个。但是,您在 self.indicator
上设置了 fractionalHeight
,这不是同一个指标,您告诉那个它需要显示,但它已被在 viewDidLoad
中添加的那个。
所以,摆脱:
var indicator: OCIndicator = OCIndicator(frame: CGRectMake(10, 30, 50, 400))
self.view.addSubview(indicator)
从 viewDidLoad
看看它是如何工作的。
关于ios - 在 Swift 中,自定义 View 的 drawRect 未正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24224926/