Как создать UIButton с черным градиентом для iPhone? - PullRequest
9 голосов
/ 04 августа 2011

Я хочу создать UIB-кнопку с обычной темой черного градиента в iOS. Я посмотрел на документацию и не могу понять, как это сделать. Когда я создаю кнопку, я получаю закругленную прямоугольную кнопку без цвета.

Вот мой код:

UIButton* leagueTeamButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

Какие-либо предложения о том, как добавить к кнопке стандартный тематический черный градиент?

Ответы [ 5 ]

27 голосов
/ 03 октября 2011

Вы также можете легко сделать это, используя слои:

-(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];
}
7 голосов
/ 18 февраля 2013

Этот метод делает красивую пользовательскую кнопку. Я объединил примеры для градиентного слоя и блеска.

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

Прикрепите все кнопки к коллекции IBOutlet ...

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

... и затем запустите метод, когда вам нужно

  for(UIButton *btn in self.bigbuttongroup)
  {
      [self myButtonChange:btn];
  }
1 голос
/ 04 августа 2011

Сделайте один (или два, если вы хотите изменить внешний вид при нажатии) в Photoshop - или любом программном обеспечении для обработки изображений - и поместите в папку ресурсов вашего проекта, используйте следующий код для добавления изображения в качестве 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 голосов
/ 21 сентября 2012

Слушайте - один из примеров того, как сделать ваш взгляд градиентным цветом, вы можете сделать то же самое с помощью кнопки.

  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];
0 голосов
/ 04 августа 2011

У вас может быть черная фоновая кнопка без эффекта градиента, вы должны установить ее фоновый цвет на черный и напечатать ее как пользовательскую кнопку.Для эффекта градиента я предложу вам поместить изображение в качестве фонового изображения вашей кнопки и установить его тип в качестве пользовательской кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...