two support open one multiple manage how hours have different app iphone ios cocoa-touch gradient

iphone - open - support account twitter



Gradientes en UIView y UILabels en iPhone (7)

Cuando se usa CAGradientLayer , a diferencia de CGGradient , el gradiente no es suave, pero tiene un paso notable hacia él. Ver :

Para obtener resultados más atractivos es mejor usar CGGradient .

Posible duplicado:
¿Dibujar manualmente un gradiente en aplicaciones de iPhone?

Mi aplicación necesita mostrar texto en UIView o UILabel pero el fondo debe ser un degradado en lugar de un verdadero UIColor . El uso de un programa de gráficos para crear el aspecto deseado no es bueno ya que el texto puede variar dependiendo de los datos devueltos desde un servidor.

¿Alguien sabe la forma más rápida de abordar esto? Tus pensamientos son muy apreciados.


Esto es lo que conseguí trabajando: configurar UIButton en xCode''s IB para que sea transparente / claro, y no hay imagen de 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];


La respuesta de Mirko Froehlich funcionó para mí, excepto cuando quise usar colores personalizados. El truco es especificar el color de la interfaz de usuario con Tono, saturación y brillo en lugar 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 obtener el tono, la saturación y el brillo de un color, use el selector de color incorporado en xcode y vaya a la pestaña HSB. El tono se mide en grados en esta vista, entonces divida el valor por 360 para obtener el valor que desea ingresar en el código.


Logro esto en una vista con una subvista que es un UIImageView. La imagen a la que apunta ImageView es un degradado. Luego establezco un color de fondo en la vista UIV y tengo una vista de degradado de color. A continuación, uso la vista como necesito y todo lo que dibuje estará debajo de esta vista de degradado. Al agregar una segunda vista en la parte superior de ImageView, puede tener algunas opciones si su dibujo estará por debajo o por encima del gradiente ...


Me doy cuenta de que este es un hilo más antiguo, pero para futuras referencias:

A partir del iPhone SDK 3.0, los gradientes personalizados se pueden implementar muy fácilmente, sin subclases ni imágenes, utilizando el nuevo 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];

Echa un vistazo a los documentos CAGradientLayer. Opcionalmente, puede especificar puntos de inicio y finalización (en caso de que no desee un degradado lineal que vaya directamente de arriba a abajo), o incluso ubicaciones específicas que se asignen a cada uno de los colores.


Puede usar Core Graphics para dibujar el gradiente, como se señaló en la respuesta de Mike. Como ejemplo más detallado, puede crear una subclase UIView para usar como fondo para su UILabel . En esa subclase UIView , anule el método drawRect: e inserte un código similar al siguiente:

- (void)drawRect:(CGRect)rect { CGContextRef currentContext = UIGraphicsGetCurrentContext(); CGGradientRef glossGradient; CGColorSpaceRef rgbColorspace; size_t num_locations = 2; CGFloat locations[2] = { 0.0, 1.0 }; CGFloat components[8] = { 1.0, 1.0, 1.0, 0.35, // Start color 1.0, 1.0, 1.0, 0.06 }; // End color rgbColorspace = CGColorSpaceCreateDeviceRGB(); glossGradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations); CGRect currentBounds = self.bounds; CGPoint topCenter = CGPointMake(CGRectGetMidX(currentBounds), 0.0f); CGPoint midCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMidY(currentBounds)); CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, midCenter, 0); CGGradientRelease(glossGradient); CGColorSpaceRelease(rgbColorspace); }

Este ejemplo particular crea un degradado de estilo brillante blanco que se dibuja desde la parte superior de la vista UIView hasta su centro vertical. Puede configurar el UIView de backgroundColor UIView a lo que quiera y este brillo se dibujará sobre ese color. También puede dibujar un degradado radial utilizando la función CGContextDrawRadialGradient .

Solo necesita dimensionar adecuadamente esta UIView y agregar su UILabel como una subvista de la misma para obtener el efecto que desea.

EDITAR (4/23/2009): Según la sugerencia de St3fan, he reemplazado el marco de la vista con sus límites en el código. Esto corrige el caso cuando el origen de la vista no es (0,0).


También puede usar una imagen gráfica de un píxel de ancho como gradiente, y configurar la propiedad de vista para expandir el gráfico para llenar la vista (asumiendo que está pensando en un degradado lineal simple y no en algún tipo de gráfico radial).