2011-08-04 14 views
9

Quiero crear un UIButton con el tema degradado negro normal en iOS. Miré la documentación y parece que no puedo entender cómo hacerlo. Cuando creo el botón, obtengo un botón recto redondeado sin color.¿Cómo crear un UIButton con un degradado negro para iPhone?

Aquí está mi código:

UIButton* leagueTeamButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

Cualquier sugerencia sobre cómo puedo añadir el gradiente de negro temática estándar para el botón?

+0

Siéntase libre de echar un vistazo a este truco que he usado para crear imágenes de botón http://memention.com/blog/2010/02/22/Make-it-work.html – epatel

Respuesta

1

Realice una (o dos, si desea cambiar de aspecto cuando presiona hacia abajo) en Photoshop o cualquier programa de procesamiento de imágenes y colóquela en la carpeta de recursos de su proyecto, use el siguiente código para agregarla como UIButton:

UIButton *yourButton=[UIButton buttonWithType:UIButtonTypeCustom]; 
[yourButton setFrame:CGRectMake(0,0,10,10)]; 
[yourButton addTarget:self action:@selector(functionYouWantToCall:) forControlEvents:UIControlEventTouchUpInside]; 

[yourButton setImage:[UIImage imageNamed:@"imageNormalState.png"] forState:UIControlStateNormal]; 
[yourButton setImage:[UIImage imageNamed:@"imageWhenPressDown.png"] forState:UIControlStateHighlighted]; // option if you want to display another image (i.e. darker one) when user press the button 
+0

Gracias. Usaré tu enfoque. – David

0

Puede tener el botón de fondo negro sin efecto degradado, debe establecer el color de fondo en negro y escribir como custombutton. Para el efecto degradado, le sugiero que coloque una imagen como imagen de fondo de su botón y configure su tipo como un botón personalizado.

27

También puede hacerlo fácilmente usando capas:

-(void) addGradient:(UIButton *) _button { 

    // Add Border 
    CALayer *layer = _button.layer; 
    layer.cornerRadius = 8.0f; 
    layer.masksToBounds = YES; 
    layer.borderWidth = 1.0f; 
    layer.borderColor = [UIColor colorWithWhite:0.5f alpha:0.2f].CGColor; 

    // Add Shine 
    CAGradientLayer *shineLayer = [CAGradientLayer layer]; 
    shineLayer.frame = layer.bounds; 
    shineLayer.colors = [NSArray arrayWithObjects: 
         (id)[UIColor colorWithWhite:1.0f alpha:0.4f].CGColor, 
         (id)[UIColor colorWithWhite:1.0f alpha:0.2f].CGColor, 
         (id)[UIColor colorWithWhite:0.75f alpha:0.2f].CGColor, 
         (id)[UIColor colorWithWhite:0.4f alpha:0.2f].CGColor, 
         (id)[UIColor colorWithWhite:1.0f alpha:0.4f].CGColor, 
         nil]; 
    shineLayer.locations = [NSArray arrayWithObjects: 
          [NSNumber numberWithFloat:0.0f], 
          [NSNumber numberWithFloat:0.5f], 
          [NSNumber numberWithFloat:0.5f], 
          [NSNumber numberWithFloat:0.8f], 
          [NSNumber numberWithFloat:1.0f], 
          nil]; 
    [layer addSublayer:shineLayer]; 
} 
+2

Estoy usando Xcode 4.3.2 y estoy obteniendo un error de compilación con esto. El error: símbolos no definidos para la arquitectura i386: "_OBJC_CLASS _ $ _ CAGradientLayer" Ya obtuve los encabezados QuartzCore importados. No estoy seguro de qué más hacer. – curtisdf

+3

solo para el registro: compila bien aquí con QuatzCore Framework agregado, y #import brainray

+2

@curtisdf, probablemente sea demasiado tarde para ayudarlo, pero debe vincular el marco QuartzCore en las fases de compilación en Además de incluir los encabezados. En Xcode 4 busque su proyecto, luego su destino, luego haga clic en Build Fases, expanda Link Binary With Libraries, haga clic en +, busque la biblioteca que necesita – zem

0

oye es un ejemplo para presentar su punto de vista con degradado de color que puede hacer lo mismo con el botón.

UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease]; 
    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = view.bounds; 


    static NSMutableArray *colors = nil; 
    if (colors == nil) { 
    colors = [[NSMutableArray alloc] initWithCapacity:3]; 
    UIColor *color = nil; 
    color = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0]; 
    [colors addObject:(id)[color CGColor]]; 
    color = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0]; 
    [colors addObject:(id)[color CGColor]]; 
    color = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0]; 
    [colors addObject:(id)[color CGColor]]; 
} 
// [(CAGradientLayer *)self.layer setColors:colors]; 
// [(CAGradientLayer *)self.layer setLocations:[NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.48], [NSNumber numberWithFloat:1.0], nil]]; 

gradient.colors = colors; 
    [view.layer insertSublayer:gradient atIndex:0]; 
[self.view addSubview:view]; 
7

Este método hace un buen botón personalizado. Combiné los ejemplos para la capa de degradado y para una capa de brillo.

-(void) myButtonChange: (UIButton*) btn 
{ 
    [btn setTitleColor:[UIColor lightGrayColor] forState:UIControlStateHighlighted]; 

    CAGradientLayer *btnGradient = [CAGradientLayer layer]; 
    btnGradient.frame = btn.bounds; 
    btnGradient.colors = [NSArray arrayWithObjects: 
         (id)[[UIColor colorWithRed:255.0f/255.0f green:255.0f/255.0f blue:255.0f/255.0f alpha:.6f] CGColor], 
         (id)[[UIColor colorWithRed:200.0f/255.0f green:200.0f/255.0f blue:200.0f/255.0f alpha:.4f] CGColor], 
         (id)[[UIColor colorWithRed:150.0f/255.0f green:150.0f/255.0f blue:150.0f/255.0f alpha:.4f] CGColor], 
         (id)[[UIColor colorWithRed:100.0f/255.0f green:100.0f/255.0f blue:100.0f/255.0f alpha:.4f] CGColor], 
         (id)[[UIColor colorWithRed:50.0f/255.0f green:50.0f/255.0f blue:50.0f/255.0f alpha:.4f] CGColor], 
         (id)[[UIColor colorWithRed:5.0f/255.0f green:5.0f/255.0f blue:5.0f/255.0f alpha:.4f] CGColor], 

         nil]; 
    [btn.layer insertSublayer:btnGradient atIndex:0]; 

    CAGradientLayer *glossLayer = [CAGradientLayer layer]; 
    glossLayer.frame = btn.bounds; 
    glossLayer.colors = [NSArray arrayWithObjects: 
        (id)[UIColor colorWithWhite:1.0f alpha:0.4f].CGColor, 
        (id)[UIColor colorWithWhite:1.0f alpha:0.1f].CGColor, 
        (id)[UIColor colorWithWhite:0.75f alpha:0.0f].CGColor, 
        (id)[UIColor colorWithWhite:1.0f alpha:0.1f].CGColor, 
        nil]; 
    glossLayer.locations = [NSArray arrayWithObjects: 
         [NSNumber numberWithFloat:0.0f], 
         [NSNumber numberWithFloat:0.5f], 
         [NSNumber numberWithFloat:0.5f], 
         [NSNumber numberWithFloat:1.0f], 
         nil]; 
    [btn.layer insertSublayer:glossLayer atIndex:0]; 

    CALayer *btnLayer = [btn layer]; 
    [btnLayer setMasksToBounds:YES]; 

    UIColor*mycolor = btn.backgroundColor; 
    [btn.layer setBorderColor:[mycolor CGColor]]; 
    [[btn layer] setBorderWidth:2.0f]; 
    [[btn layer] setCornerRadius:10.0f];  
} 

Una todos los botones para una colección IBOutlet ...

@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *bigbuttongroup; 

... y luego ejecutar el método cuando necesite

for(UIButton *btn in self.bigbuttongroup) 
    { 
     [self myButtonChange:btn]; 
    } 
Cuestiones relacionadas