2013-06-18 10 views
7

Ich möchte nur ein einfaches Rechteck auf einen Blick ziehen, um die folgende Funktion:UIBezierPath einfaches Rechteck

- (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]; 
    } 
} 

Der obige Code die Ansicht mit einfachen schwarzen Hintergrund füllt, außerhalb des Rechtecks ​​nicht transparent ist. Wie kann ich das beheben?

Edit:

Die Lösung unten funktioniert, aber das funktioniert auch:

[self setOpaque:NO]; 
+0

Dies ist ein besseres Beispiel für eine Frage als ich dachte, dass es sein würde. Es gibt einen fehlerhaften Code, eine Erklärung des Problems und das gewünschte Ergebnis. Es ist eine Schande, dass ich die Antwort nicht kenne! –

+2

Ich konnte das Problem mit Ihrem Code nicht reproduzieren, aber vielleicht sollten Sie '[super drawRect: rect]' nicht aufrufen, vergleiche http://stackoverflow.com/questions/14074281/subclassed-uiview-shows-black-background-if -drawrect-is-overridden. –

+0

danke für die Kommentare :), habe ich versucht, aber verhält sich genauso. – flatronka

Antwort

9

Sie Code Zeichnung ist OK. Wenn Sie die benutzerdefinierte gezeichnet Ansicht wollen transparenten Hintergrund haben, müssen Sie nur

self.backgroundColor = [UIColor clearColor]; 

in Sicht - (id)initWithFrame:(CGRect)frame

bearbeiten setzen: Nur eine kleine Anmerkung in Bezug auf [super drawRect:rect] anrufen. UIView docs sagt:

Wenn Sie UIView direkt Unterklasse, Ihre Implementierung dieser Methode nicht super anrufen muss. Wenn Sie jedoch eine andere Ansichtsklasse erstellen, sollten Sie in Ihrer Implementierung zu einem bestimmten Zeitpunkt Super aufrufen.

+0

danke, das funktioniert, ich fand eine alternative Lösung, die auch funktioniert. – flatronka