Извините за этот монолог. :)
Дело в том, что слой UIView явно рисует фон, который не зависит от drawRect:
. Вот почему вы не можете избавиться от фона, переопределив drawRect:
.
Вы можете либо переопределить - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
и заставить слой рисовать что хотите, либо переопределить - (void) setBackgroundColor:(UIColor *)newColor
и не назначать newColor для backgroundColor , но для своего собственного ivar, например myBackgroundColor . Затем вы можете использовать myBackgroundColor в drawRect; нарисовать фон так, как вам нравится.
Переопределение setBackgroundColor:
Определите переменную экземпляра для хранения цвета фона, например, myBackgroundColor . В ваших методах инициализации установите реальный цвет фона на clearColor:
- (id) initWithCoder:(NSCoder *)aDecoder
{
if ((self = [super init...])) {
[super setBackgroundColor:[UIColor clearColor]];
}
return self;
}
Override:
- (void) setBackgroundColor:(UIColor *)newColor
{
if (newColor != myBackgroundColor) {
[myBackgroundColor release];
myBackgroundColor = [newColor retain];
}
}
Затем используйте myBackgroundColor в вашем методе drawRect :. Таким образом, вы можете использовать цвет, назначенный из Interface Builder (или Xcode4) в вашем коде.