poner personalizar pantalla mensajes mandar los imagen fondos fondo efectos efecto con como cambiar ajustar activar iphone uiview subclass

personalizar - iphone fondos de pantalla



Hacer fondo de UIView un gradiente sin sub clasificación (4)

Cambio la respuesta adoptada a mi edición.

+(void) setBlackGradientToView:(UIView*)targetView { CGRect frame = targetView.frame; // Allocate color space CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); //allocate myGradient CGFloat locationList[] = {0.0f, 1.0f}; CGFloat colorList[] = {0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f}; CGGradientRef myGradient = CGGradientCreateWithColorComponents(colorSpace, colorList, locationList, 2); // Allocate bitmap context CGContextRef bitmapContext = CGBitmapContextCreate(NULL, frame.size.width, frame.size.height, 8, 4 * frame.size.width, colorSpace, kCGImageAlphaPremultipliedLast); //Draw Gradient Here CGContextDrawLinearGradient(bitmapContext, myGradient, CGPointMake(0.0f, 0.0f), CGPointMake(0, frame.size.height), 0); // Create a CGImage from context CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext); // Create a UIImage from CGImage UIImage *uiImage = [UIImage imageWithCGImage:cgImage]; // Release the CGImage CGImageRelease(cgImage); // Release the bitmap context CGContextRelease(bitmapContext); // Release the color space CGColorSpaceRelease(colorSpace); //Create the patterned UIColor and set as background color [targetView setBackgroundColor:[UIColor colorWithPatternImage:uiImage]]; //return uiImage; }

¿Hay alguna manera de hacer que el fondo de una UIView sea un degradado sin subclasificarlo? Prefiero no usar un archivo de imagen para lograr esto tampoco. Simplemente parece obtuso tener que subclase UIView solo para dibujar un gradiente para el fondo.


Estoy de acuerdo con rpetrich, sería más limpio simplemente hacer la subclase UIView. Para ver un ejemplo de cómo hacer esto, vea mi respuesta en esta pregunta . Si lo desea, puede crear una subclase UIView de gradiente genérico y simplemente colocar eso detrás de las vistas que desea tener fondos de gradiente.


Podrías hacerlo:

CAGradientLayer *gradient = [CAGradientLayer layer]; gradient.frame = self.view.bounds; gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil]; [self.view.layer insertSublayer:gradient atIndex:0];

Swift <= 2.3:

let gradient = CAGradientLayer() gradient.frame = view.bounds gradient.colors = [UIColor.redColor().CGColor, UIColor.whiteColor().CGColor] view.layer.insertSublayer(gradient, atIndex: 0)

Swift 3.0:

let gradient = CAGradientLayer() gradient.frame = view.bounds gradient.colors = [UIColor.red().cgColor, UIColor.white().cgColor] view.layer.insertSublayer(gradient, at: 0)

Asegúrese de agregar también el marco de QuartzCore a su proyecto.

#import <QuartzCore/QuartzCore.h>


Puede usar +[UIColor colorWithPatternImage:] para producir un fondo estampado. Ejemplo (trae tu propio CGGradient):

// Allocate color space CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); // Allocate bitmap context CGContextRef bitmapContext = CGBitmapContextCreate(NULL, 320, 480, 8, 4 * 320, colorSpace, kCGImageAlphaNoneSkipFirst); //allocate myGradient CGFloat locationList[] = {0.0f, 1.0f}; CGFloat colorList[] = {0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f}; CGGradientRef myGradient = CGGradientCreateWithColorComponents(colorSpace, colorList, locationList, 2); // Draw Gradient Here CGContextDrawLinearGradient(bitmapContext, myGradient, CGPointMake(0.0f, 0.0f), CGPointMake(320.0f, 480.0f), 0); // Create a CGImage from context CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext); // Create a UIImage from CGImage UIImage *uiImage = [UIImage imageWithCGImage:cgImage]; // Release the CGImage CGImageRelease(cgImage); // Release the bitmap context CGContextRelease(bitmapContext); // Release the color space CGColorSpaceRelease(colorSpace); // Create the patterned UIColor and set as background color [targetView setBackgroundColor:[UIColor colorWithPatternImage:image]];

Sin embargo, probablemente será más sencillo crear una subclase UIView . Usará menos memoria también.