¿Cómo forzar networkingibujar (drawRect) de una SubView cuando cambia de dimensiones?

Tengo una UIView que contiene una fila de subclasss de UIView . La subclass ha anulado drawRect : y ha establecido contentMode = UIViewContentModeRedraw .

Cuando el usuario aplasta y estira el contenedor principal, el child views squash y se estira. A medida que ocurre el cambio de forma, me gustaría tener drawRect llamado repetidamente para cambiar el contenido de las child views . Hasta ahora no he tenido éxito. ¿Cuál es la manera correcta de hacer esto?

Aclamaciones,

Doug

En Cocoa, rara vez (si alguna vez) llama a DrawRect: solo marca la región o la vista que necesita actualizar, y se progtwigrá para volver a dibujar. Esto permite que las repeticiones para múltiples invalidaciones se queuepsen juntas.

Para Cocoa Touch, desea que [view setNeedsDisplay] , o setNeedsDisplayinRect: (CGRect)

Debe llamar a [view setNeedsLayout], esto debería hacer que las subvistas reciban un drawRect: llame si cambia el layout. No he probado esto, sin embargo.

Esta solución es un poco loca, pero tiene sentido lógico y tiene un gran resultado visual. Estoy trabajando con un NSLayoutManager y un par de NSTextContainer , distribuyendo text en dos columnas. Debido a que estoy utilizando múltiples contenedores de text (y no estoy seguro de que desee varios UITextView ), estoy anulando el método draw(rect: CGRect) de MyDrawingView: UIView .

El problema es que el uso de self.contentMode = .networkingraw aún genera algunos estiramientos menores en la rotation, lo suficientemente significativo como para ser un self.contentMode = .networkingraw rompe-deal.

Noté que la configuration de contentMode = .left , o incluso contentMode = .scaleAspectFit estaba cerca de lo que quería, en términos de rotation perfecta de píxeles. Pero, obviamente, no recibí la convocatoria que necesitaba.

Entonces, layoutSubviews() , layoutSubviews() el contentMode a .scaleAspectFit , llamado super.layoutSubviews() , y luego lo super.layoutSubviews() nuevo. :PAG

 override func layoutSubviews() { self.contentMode = .scaleAspectFit super.layoutSubviews() self.contentMode = .networkingraw } 

Es perfecto.