poner pantalla grises filtros escala como colores color cambiar apariencia adaptaciones ios ios7 uiview

ios - pantalla - ¿Por qué no puedes cambiar un color de fondo UIView en drawRect?



como poner filtros en ipad (4)

Actualización para swift3 en la función drawRect :

self.backgroundColor = UIColor.red self.backgroundColor?.setFill() UIGraphicsGetCurrentContext()!.fill(rect);

En teoría, puede establecer fácilmente el color de fondo a través de:

self.backgroundColor = [UIColor redColor];

en drawRect, pero esto no tiene ningún efecto. Puede cambiar el tamaño de la vista, sus bordes, sus subvistas, etc., pero no el color de fondo. Las consultas de SO similares sugieren agregar un subView o cambiar el backgroundColor en los mensajes de inicialización initWithFrame o initWithCoder. Mi pregunta es ¿por qué no funciona en drawRect cuando se pueden cambiar otras características?

Cambiar la capa de la vista backgroundColor tampoco hace nada, quizás por la misma razón. ¿Cuál es la relación entre el color de fondo de la vista y el color de fondo de su capa, ya que no son lo mismo?


Como dijo Rob en su respuesta, el fondo ya se ha dibujado cuando se llama al método drawRect . Si necesita cambiar el color de fondo en este punto, deberá dibujarlo usted mismo:

[self.backgroundColor setFill]; CGContextFillRect(UIGraphicsGetCurrentContext(), rect);

Por lo tanto, aún puede cambiar el valor de la propiedad, pero no se utilizará hasta que la vista se dibuje nuevamente.


Establezca el color de fondo en la función awakeFromNib :

// Objective-C - (void)awakeFromNib { self.backgroundColor = [UIColor redColor]; } // Swift override func awakeFromNib() { backgroundColor = UIColor.red }


Si establece backgroundColor cuando la vista se configura por primera vez (es decir, antes de que el sistema operativo llame a drawRect ), ese drawRect backgroundColor se usará sin ningún otro código de su parte. Como dice la referencia de clase UIView , la propiedad backgroundColor se usa para "establecer el color de la vista en lugar de dibujar ese color".

Pero si intenta establecerlo en drawRect , el relleno de fondo ya se realizó, por lo que no verá de inmediato el efecto de cambiar el color de fondo (a menos que realice manualmente otro relleno en drawRect ). El método drawRect debe usarse para representar la vista, no para configurarlo.

Si UIView establece el UIView backgroundColor medida que se configura la vista (por ejemplo, en cualquier método de init que se disponga), se usará ese color de fondo, sin necesidad de hacer nada más en drawRect .