2011-10-27 14 views
10

sto cercando di disegnare una cornice pulsante personalizzato come segue:pulsante personalizzato telaio non sembra buono come rotonda Rect UIButton

UIBezierPath *stroke = [UIBezierPath bezierPathWithRoundedRect:self.bounds 
                cornerRadius:RECT_CORNECR_RADIUS]; 

[stroke stroke]; 

Ma per qualche motivo le curve angolari guardare pensatore rispetto ai lati. Se si osserva il frame predefinito di UIButton, è molto uniforme. A è un UIButton, B è un pulsante personalizzato.

Qualche idea su come renderlo più simile a UIButton.

A is a UIButton, B is a custom button

risposta

25

Si sta accarezzando i limiti del proprio pulsante. Questo disegnerà la linea centrata sul bordo della vista, quindi metà dello spessore della linea è fuori dai limiti e non viene disegnata. Questo è il motivo per cui è pieno di spessore negli angoli. Usa CGRectInset sul rettangolo di limitazione (inserto della metà dello spessore della linea) e traccia quel rettangolo.

+0

Questo è tutto! Tutto ha senso ora. Ho fatto CGRectInset (self.bounds, 1, 1) e tutto ha funzionato perfettamente. Grazie! – Nikolozi

+0

Grazie, prima di aggiungere l'inserto stavo ottenendo una corsa svasata agli angoli di un rettangolo arrotondato tratteggiato e questo l'ha risolto. – thomh

0

Il problema che hai è probabilmente a causa di antialiasing. Puoi provare a cambiare le impostazioni antialias di CoreGraphics prima di disegnare beizerPath.

Una soluzione più semplice è utilizzare il CALayer del pulsante e la sua proprietà cornerRadius. Sarebbe più facile per disegnare un angolo arrotondato

Se self è il tuo pulsante personalizzato:

self.layer.cornerRadius = RECT_CORNER_RADIUS; 
self.layer.borderWidth = 1.0f; 
self.layer.borderColor = [UIColor blackColor].CGColor; 

Naturalmente non dimenticate di importare il QuartzCore quadro e importare sua intestazione per far funzionare tutto (#import)

Problemi correlati