En Swift, drawRect para la vista personalizada no se actualiza correctamente

A continuación se muestra mi function drawRect para una vista personalizada simple. Cuando uso

var h: CGFloat = 200 

la vista se muestra correctamente: una parte del rectángulo es negra, parte de la cual es roja. Pero cuando uso

 var h: CGFloat = fractionalHeight*parentViewHeight 

todo lo que tengo es un rectángulo negro. Si fractionalHeight (una propiedad de la vista) es 0.5, la mitad del rectángulo debería ser rojo. La statement impresa confirma el hecho de que h es lo que creo que debería ser. Hmmmmm ¿Que esta pasando?

  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); // networking CGContextFillRect(ctx, CGRectMake(0, 0, parentViewWidth, h)) println("in drawRect, h = \(h)") } 

Creo que estás hablando con 2 instancias diferentes de OCIndicator.

Creo que tienes un OCIndicator (quizás en tu StoryBoard) conectado a un IBOutlet en tu ViewController .

En viewDidLoad está creando una segunda instancia de OCIndicator y asignándola al indicator variable local y está agregando eso a su subView que está cubriendo el primero. Pero entonces, está configurando el valor fractionalHeight en self.indicator que no es el mismo indicador y le está diciendo a ese que necesita mostrar, pero ha sido cubierto por el agregado en viewDidLoad .

Entonces, deshágase de:

 var indicator: OCIndicator = OCIndicator(frame: CGRectMake(10, 30, 50, 400)) self.view.addSubview(indicator) 

desde viewDidLoad y ver cómo funciona eso.