2011-10-27 11 views
10

Estoy tratando de dibujar un marco botón personalizado de la siguiente manera:marco de botón personalizado no se ve tan bueno como Ronda Rect UIButton

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

[stroke stroke]; 

Pero por alguna razón las curvas de las esquinas mirar pensador que los lados. Si miras el marco por defecto de UIButton, es muy uniforme. A es un UIButton, B es un botón personalizado.

Alguna idea de cómo puedo hacer que se parezca más al UIButton.

A is a UIButton, B is a custom button

Respuesta

25

Usted está acariciando los límites de su botón. Esto dibujará su línea centrada sobre el borde de la vista, por lo que la mitad del grosor de la línea está fuera de los límites y no se dibuja. Es por eso que es de espesor total en las esquinas. Usa CGRectInset en tu rectángulo de límites (recuadrado por la mitad del grosor de tu línea) y acaricia ESTE recto.

+0

Eso es todo! Todo tiene sentido ahora. Hice CGRectInset (self.bounds, 1, 1) y todo funcionó a la perfección. ¡Gracias! – Nikolozi

+0

Gracias, antes de agregar el recuadro, recibí un trazo acampanado en las esquinas de un rectángulo redondeado discontinuo y esto lo resolvió. – thomh

0

El problema que tiene es probablemente debido a antialiasing. Puede intentar cambiar la configuración de antialiasing de CoreGraphics antes de dibujar su beizerPath.

Una solución más fácil es usar el CALayer de su botón y su propiedad cornerRadius. Sería más fácil dibujar una esquina redondeada

Si self es su botón personalizado:

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

Por supuesto, no se olvide de importar el QuartzCore marco e importar su cabecera para que esto funcione (# import)

Cuestiones relacionadas