2010-09-23 19 views
5

Estoy creando un uicontrol a medida que lo hace la vista a través de drawRect:. Deseo utilizar la propiedad backgroundColor existente para permitir la personalización a través de Interface Builder. Sin embargo, si se establece el backgroundColor, cuando se llame a drawRect: todo el rectángulo ya se ha rellenado. Tengo opaque = NO y clearsContextBeforeDrawing = YES. Si configuro backgroundColor para clearColor, entonces puedo renderizar solo las partes que quiero.UIView parcialmente transparente mientras se usa el backgroundColor

¿cómo puedo evitar la UIView de rellenar todo el rectángulo con el backgroundColor de forma automática?

Debo mencionar que el control personalizado se coloca en el Interface Builder por lo que el initWithCoder: método se utiliza para crear una instancia del objeto.

Esto debería ciertamente posible, como si se hereda de UIButton - que utiliza el backgroundColor - el rectángulo no ha sido rellenado

Respuesta

1

Como se trata de un control personalizado, ¿podría añadir una variable UIColor *myColor, y, en el. método init, después de haber sido leído desde la punta, establecer myColor = self.backgroundColor y self.backgroundColor = [UIColor clearColor]? Entonces obviamente use myColor en su drawRect.

No he probado esto, y parece un poco feo, pero a lo mejor funciona?

2

Necesitas overide:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx; 

Aquí es donde se aplica el color de fondo. Si desea que la vista maneje el color de fondo, llame al método drawLayer del super.

Cuestiones relacionadas