Przepraszamy za ten monolog. :)
Chodzi o to, że warstwa UIView najwyraźniej rysuje tło, które jest niezależne od drawRect:
. Dlatego nie można pozbyć się tła, przesłonić drawRect:
.
Można też zastąpić - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
i zrobić losowanie warstwy co chcesz, lub zastąpić - (void) setBackgroundColor:(UIColor *)newColor
i nie przypisywać newColor do backgroundColor, ale na swój ivar, jak myBackgroundColor. Możesz następnie użyć myBackgroundColor w drawRect; narysować tło, jak ci się podoba.
Zastępowanie setBackgroundColor:
Definiowanie instancji zmiennej do przechowywania kolor tła, na przykład myBackgroundColor. W twoich metod init ustawić prawdziwy kolor tła za 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];
}
}
Następnie użyj myBackgroundColor w Twojej drawRect: metoda. W ten sposób możesz użyć koloru przypisanego przez Interface Builder (lub Xcode4) w swoim kodzie.
To prawdopodobnie problem z kodem rysunku. Czy możesz to opublikować, abyśmy mogli rzucić okiem? Domyślam się, że gdzieś rysujesz w sposób, który albo ignoruje wartości alfa, albo rysuje coś nieprzezroczystego nad tym, co myślałeś, że wyciągnąłeś. Ponadto, aby upewnić się, że po ustawieniu 'backgroundColor' masz odpowiednio ustawiony zestaw alpha? –
Cóż, mogę opublikować mój drawRect :, ale jak już powiedziałem, jest on całkowicie pusty:
Alfa jest ustawione w IB, a rysuje się na dowolny kolor, który ustawię, z czymkolwiek alfa. Zakładam, że coś musi się dziać wewnątrz, ale nie ma nowego superviewu i żadnego wydziału, który mógłby rysować tło. Również backgroundColor warstwy widoku jest zerowy. – Pascal