UIControl子类drawInContext未被调用

时间:2015-08-12 23:57:04

标签: ios swift uicontrol

我试图按照本教程在iOS中构建自定义控件:http://www.raywenderlich.com/36288/how-to-make-a-custom-control

然后我想试用@IBDesignable和@IBInspectable属性来查看实时渲染是如何工作的,所以我暴露了它们。然后我在我的故事板上删除了一个UIView,并将类更改为RangeSlider,虽然它在助理编辑器的预览模式下看起来没问题,但是当我在模拟器中运行它时,它实际上并不渲染两个thumbLayers。当我在代码中设置断点时,我看到即使为自定义控件的不同层调用了setNeedsDisplay,也从不调用实际的drawInContext方法。为了尝试重现这个,我创建了这两个文件,同样的事情发生了,没有调用drawInContext。

TestControl.swift
import UIKit

@IBDesignable
class TestControl: UIControl {

    @IBInspectable var cornerRadius: CGFloat = 3.0 {
        didSet {
            updateLayerFrames()
        }
    }

    let testLayer = TestLayer()

    override var frame: CGRect {
        didSet {
            updateLayerFrames()
        }
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

//        testLayer.contentsScale = UIScreen.mainScreen().scale
//        layer.addSublayer(testLayer)
    }

    override init(frame: CGRect) {
        super.init(frame: frame)

        testLayer.contentsScale = UIScreen.mainScreen().scale
        layer.addSublayer(testLayer)
    }

    func updateLayerFrames() {
        CATransaction.begin()
        CATransaction.setDisableActions(true)

        testLayer.setNeedsDisplay()

        CATransaction.commit()
    }
}


TestLayer.swift
import UIKit
import QuartzCore

class TestLayer: CALayer {

    override func drawInContext(ctx: CGContext!) {
        println("test test")


    }

}


ViewController.swift
    @IBOutlet var testControl: TestControl!

我是否对创建自定义控件的过程缺少了什么?对不起,如果这是一个菜鸟问题。

0 个答案:

没有答案