I have a custom UIControl, and I implement as:
required init(coder: NSCoder) {
    super.init(coder: coder)
    initSubComponents()
}
func initSubComponents() {
    // Display UIControl border for visual debugging
    self.layer.borderColor = UIColor.redColor().CGColor
    self.layer.borderWidth = 3.0
    subviewContainer = UIView(frame: self.bounds.rectByInsetting(dx: 0, dy: 0))
    // Display container border for visual debugging
    subviewContainer.layer.borderColor = UIColor.redColor().CGColor
    subviewContainer.layer.borderWidth = 3.0
    println("UIControl frame: \(self.frame)")
    println("subviewContainer frame: \(subviewContainer.frame)")
}
or
override func drawRect(rect: CGRect) {
    initSubComponents()
    // Code to add those subviews into this UIControl
}
func initSubComponents() {
    // Display UIControl border for visual debugging
    self.layer.borderColor = UIColor.redColor().CGColor
    self.layer.borderWidth = 3.0
    subviewContainer = UIView(frame: self.bounds.rectByInsetting(dx: 0, dy: 0))
    // Display container border for visual debugging
    subviewContainer.layer.borderColor = UIColor.redColor().CGColor
    subviewContainer.layer.borderWidth = 3.0
    println("UIControl frame: \(self.frame)")
    println("subviewContainer frame: \(subviewContainer.frame)")
}
I found a situation that I don't understand: the frame I got from the above 2 different approaches are different! Why? The first approach should be better, cause I should not init in override func drawRect(rect: CGRect), however I got the exact frame I expect in the second approach, not the first approach!
 
     
     
    