iphone - design - uikit ios




Gradientes no UIView e UILabel no iPhone (5)

Duplicata Possível:
Desenhando manualmente um gradiente em aplicativos para iPhone?

Meu aplicativo precisa exibir texto em um UIView ou UILabel mas o back ground deve ser um gradiente em oposição a um verdadeiro UIColor . Usar um programa gráfico para criar a aparência desejada não é bom, pois o texto pode variar dependendo dos dados retornados de um servidor.

Alguém sabe a maneira mais rápida de resolver isso? Sua opinião é muito bem-vinda.


A resposta de Mirko Froehlich funcionou para mim, exceto quando eu queria usar cores personalizadas. O truque é especificar a cor da interface do usuário com matiz, saturação e brilho, em vez de RGB.

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = myView.bounds;
UIColor *startColour = [UIColor colorWithHue:.580555 saturation:0.31 brightness:0.90 alpha:1.0];
UIColor *endColour = [UIColor colorWithHue:.58333 saturation:0.50 brightness:0.62 alpha:1.0];
gradient.colors = [NSArray arrayWithObjects:(id)[startColour CGColor], (id)[endColour CGColor], nil];
[myView.layer insertSublayer:gradient atIndex:0];

Para obter a Matiz, Saturação e Brilho de uma cor, use o seletor de cores xcode embutido e vá para a guia HSB. O matiz é medido em graus nesta visualização, então divida o valor por 360 para obter o valor que você deseja inserir no código.


Ao usar CAGradientLayer , ao contrário de CGGradient , o gradiente não é suave, mas tem um passo perceptível para ele. Vejo :

Para obter resultados mais atraentes, é melhor usar o CGGradient .


Eu percebo que este é um segmento mais antigo, mas para referência futura:

A partir do iPhone SDK 3.0, os gradientes personalizados podem ser implementados com muita facilidade, sem subclasses ou imagens, usando o novo CAGradientLayer :

 UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease];
 CAGradientLayer *gradient = [CAGradientLayer layer];
 gradient.frame = view.bounds;
 gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
 [view.layer insertSublayer:gradient atIndex:0];

Dê uma olhada nos documentos CAGradientLayer. Opcionalmente, você pode especificar os pontos inicial e final (caso não queira um gradiente linear que vá direto de cima para baixo) ou até locais específicos que mapeiem cada uma das cores.


Isto é o que eu tenho trabalhando - conjunto UIButton no IB do xCode para transparente / claro, e sem imagem BG.

UIColor *pinkDarkOp = [UIColor colorWithRed:0.9f green:0.53f blue:0.69f alpha:1.0];
UIColor *pinkLightOp = [UIColor colorWithRed:0.79f green:0.45f blue:0.57f alpha:1.0];

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = [[shareWordButton layer] bounds];
gradient.cornerRadius = 7;
gradient.colors = [NSArray arrayWithObjects:
                   (id)pinkDarkOp.CGColor,
                   (id)pinkLightOp.CGColor,
                   nil];
gradient.locations = [NSArray arrayWithObjects:
                      [NSNumber numberWithFloat:0.0f],
                      [NSNumber numberWithFloat:0.7],
                      nil];

[[recordButton layer] insertSublayer:gradient atIndex:0];

Você também pode usar uma imagem gráfica com um pixel de largura como o gradiente e definir a propriedade view para expandir o gráfico para preencher a exibição (supondo que você esteja pensando em um gradiente linear simples e não em algum tipo de gráfico radial).





gradient