2009-05-12 17 views
12

Estoy tratando de establecer una imagen como fondo de un UIButton personalizado. Pude establecer una imagen de fondo para el UIButton "rect rounded" en el constructor de interfaces, pero ahora los bordes se han desvanecido. ¿Hay alguna forma de retener las fronteras? Además, me gustaría que los bordes aparezcan rectangulares en lugar de redondos.Cómo establecer el borde del rectángulo para el tipo personalizado UIButton

+0

Un poco más de información, tal vez? ¿Está implementando -drawRect: en absoluto? ¿De qué tipo de botón personalizado estamos hablando? ¿Has intentado establecer su fondo con una imagen (eso es lo que la mayoría de la gente probablemente hará), o estás buscando específicamente métodos de dibujo rectangulares? –

+0

Tendrás que ser un poco más específico. ¿Estás tratando de dibujar un borde personalizado? Establecer el tamaño de tu botón? Por favor, danos más detalles. –

+0

bien, estoy tratando de establecer una imagen como fondo de UIButton. Hice esto configurando la imagen de fondo para UIButton "redondos rect" en el constructor de interfaces. pero las fronteras se han desvanecido, ¿hay alguna forma de retener las fronteras? también necesito hacer bordes como rect en lugar de "redondos rect". – afin

Respuesta

3

Al configurar una imagen de fondo en un botón, el botón esboza desaparezca. incluirlos en su imagen, si necesita diferentes tamaños miran el UIImage

stretchableImageWithLeftCapWidth:topCapHeight:

método.

17

Echa un vistazo a las propiedades cornerRadius, borderWidth y borderColor de CALayer. Estas propiedades son nuevas a partir de iPhone OS 3.0.

Probablemente desee establecer la subclase UIButton y establecer estas propiedades en el constructor. Su botón tiene una propiedad de capa a la que puede acceder para establecer estas propiedades de borde.

He aquí un ejemplo:

- (id)initWithFrame:(CGRect)frame { 
if(self = [super initWithFrame:frame]) { 

    [self.layer setBorderWidth:1.0]; 
    [self.layer setCornerRadius:5.0]; 
    [self.layer setBorderColor:[[UIColor colorWithWhite:0.3 alpha:0.7] CGColor]]; 
} 

return self; 
} 
+0

¿Hay alguna solución en iPhone 2.2.1? – afin

+0

En 2.2.1 me gustaría ir con algo en la línea de lo que Kendall sugiere a continuación. ¿Es esta una nueva aplicación? Si es así, estoy bastante seguro de que Apple solo aprobará aplicaciones que sean compatibles con iPhone OS 3.0 de ahora en adelante. –

+0

Sí, es una nueva aplicación. Dado que Apple solo aprobará las aplicaciones compatibles con OS 3.0, las nuevas aplicaciones pueden no funcionar con versiones anteriores del sistema operativo. A pesar de que la actualización de OS 3.0 es gratuita, algunos de ellos pueden no querer actualizar. Por favor comparte tus pensamientos. – afin

43
#import <QuartzCore/QuartzCore.h> // don't forget to add this in your file 
    CALayer * layer = [yourUIButton layer]; 
    [layer setMasksToBounds:YES]; 
    [layer setCornerRadius:0.0]; //when radius is 0, the border is a rectangle 
    [layer setBorderWidth:1.0]; 
    [layer setBorderColor:[[UIColor grayColor] CGColor]]; 

Sé que esta es una pregunta anterior, pero aún así me gustaría publicar mi respuesta aquí. ya que estaba buscando una respuesta, pero me resolví de una manera fácil.

+0

Muchas gracias amigo – SampathKumar

+0

realmente no hay manera de hacer esto sin core anim? –

+2

Para aquellos que no vieron la adición de @TylerJames a continuación: Tenga en cuenta que necesita importar el marco QuartzCore para que esto funcione. – mbuc91

8

También podría "Atributos de tiempo de ejecución definidos por el usuario" en IB para establecer las esquinas redondeadas como se muestra en la imagen a continuación.

http://i.stack.imgur.com/uBkuB.png

+0

¡Genial! gracias –

+0

¡Este es un buen descubrimiento! Gracias :) – windson

7

sólo me gustaría añadir a las respuestas proporcionadas por Nanshi y Jonathan.

Para acceder a las propiedades border y cornerRadius de la capa, primero deberá importar el marco QuartzCore.

#import <QuartzCore/QuartzCore.h>

De lo contrario no será capaz de acceder a las propiedades.

+0

gracias por agregar el truco importante :) – trillions

1

Puede establecer las propiedades de borde en el CALayer accediendo a la propiedad de capa del botón.

En primer lugar, añadir cuarzo propiedades

#import <QuartzCore/QuartzCore.h> 

Set:

[[myButton layer] setBorderWidth:2.0f]; 
[[myButton layer] setBorderColor:[UIColor greenColor].CGColor]; 
Cuestiones relacionadas