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
.