2013-06-18 21 views
7

ja po prostu do opracowania prostego prostokątna w widoku z zastosowaniem następującej funkcji:UIBezierPath prosty prostokąt

- (void)drawRect:(CGRect)rect { 
    [super drawRect:rect]; 
    if (self.drawTextBouble) { 
     [[UIColor blueColor] setFill]; 
     UIBezierPath *aPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(40, 0, 230, 120) cornerRadius:12.0]; 
     [aPath fill]; 
    } 
} 

Kod powyżej wypełnia widok z czystym czarnym tle, poza prostokąta nie jest przezroczysty. Jak mogę to naprawić?

Edit:

Poniższa rozwiązanie działa, ale działa również:

[self setOpaque:NO]; 
+0

To jest lepszy przykład na pytanie, niż myślałem, że będzie. Istnieje istniejący, błędny kod, wyjaśnienie problemu i pożądany rezultat. Szkoda, że ​​nie znam odpowiedzi! –

+2

Nie mogłem odtworzyć problemu z kodem, ale może nie powinieneś nazywać '[super drawRect: rect]', porównywać http://stackoverflow.com/questions/14074281/subclassed-uiview-shows-black-background-if -prawidłowo-jest-przesłonięty. –

+0

dziękuję za komentarze :), próbowałem, ale zachowuje się tak samo. – flatronka

Odpowiedz

9

rysujesz kod jest OK. Jeśli chcesz zwyczaj wyciągnąć widok mieć przezroczyste tło, wystarczy ustawić

self.backgroundColor = [UIColor clearColor]; 

Mając za - (id)initWithFrame:(CGRect)frame

EDIT: tylko trochę notatkę dotyczącą nazywając [super drawRect:rect]. UIView docs mówi:

Jeśli podklasy UIView bezpośrednio, implementacja tej metody nie trzeba zadzwonić Super. Jednakże, jeśli podklasujesz inną klasę widoku, powinieneś zadzwonić super w pewnym momencie swojej implementacji.

+0

dziękuję, że to działa, znalazłem alternatywne rozwiązanie, które działa również. – flatronka