ios - 在 Swift 中,自定义 View 的 drawRect 未正确更新

标签 ios uiview swift drawrect

下面是我的一个简单自定义 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/

相关文章:

ios - 如何使用 Xcode 和 Swift 在我的导航栏中添加标题?

ios - UIView 上的 inputAccessoryView

ios - Xcode/swift : No such module 'GeoFire'

ios - 在没有 Storyboard 的情况下在 UIView 中添加 UICollectionView

ios - 在 UICollectionViewReusableView header 中访问 UIViews 的委托(delegate)方法

ios - 使用 UIActivityViewController 共享内容后出现黑屏

iphone - 全屏 View 隐藏导航和标签栏 iphone

ios - Swift - 专门的 _VariantDictionaryBuffer.ensureUniqueNativeBuffer(Int)

ios - Swift - 如何将 View Controller 的引用传递给子 UIView 类?

ios - 如何从一维条码图像解码