puedo - Dibujando manualmente un gradiente en las aplicaciones de iPhone?
juegos ipad niños 3 años (7)
Querrá usar CGGradient. Consulte el documento " CGGradient Reference " de iPhone Dev Center.
Si tengo dos UIColors, ¿cuál es la mejor manera de dibujar un degradado uniforme entre ellos en un área de tamaño arbitrario?
Supongo que crearía una subclase UIView y usaría los métodos de dibujo CG en el método drawRect. Simplemente no sé cuáles, o si hay algún escollo a tener en cuenta, como el rendimiento. ¿Alguien ha hecho esto?
#import <QuartzCore/QuartzCore.h>
- (void) setGradient {
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor], (id)[[UIColor blackColor] CGColor], nil];
[self.view.layer insertSublayer:gradient atIndex:0];
}
No olvides agregar la biblioteca QuartzCore a tu proyecto.
La misma solución que @Anton Chikin pero un poco más robusta. Observe la anulación de layerClass
... de esta manera, no tiene que preocuparse por establecer el marco y el marco se actualiza automáticamente al girar y cambiar el tamaño.
class GradientView: UIView {
var colorA : UIColor = UIColor.greenColor() {
didSet { updateGradient() }
}
var colorB : UIColor = UIColor.blueColor() {
didSet { updateGradient() }
}
override class func layerClass() -> AnyClass {
return CAGradientLayer.self
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
updateGradient()
}
func updateGradient() {
if let gLayer = layer as? CAGradientLayer {
gLayer.colors = [colorA.CGColor, colorB.CGColor]
}
}
}
Si está utilizando IB, puede establecer las propiedades a través de "Atributos de tiempo de ejecución definidos por el usuario".
Si no está utilizando IB, use el otro inicializador.
La forma Swift de agregar gradiente es:
var view : UIView = UIView(frame: CGRectMake(0, 0, 320, 100))
var g : CAGradientLayer = CAGradientLayer()
g.frame = gradientView.bounds
g.colors = ["000000".UIColor.CGColor , "111111".UIColor.CGColor]
view.layer.insertSublayer(g, atIndex: 0)
UIColor()
es una clase de ayuda para Swift para convertir hex color
rgb color
, muy recomendable.
hola, puede usar following para aplicar degradado a la vista
-(void)applyGradientEffecttoView:(UIView *)aView
{
// Create the colors
UIColor *darkOp = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:1.0];
UIColor *lightOp =[UIColor colorWithRed:255.0f green:255.0f blue:255.0f alpha:0.0];
// Create the gradient
CAGradientLayer *gradient = [CAGradientLayer layer];
// Set colors
gradient.colors = [NSArray arrayWithObjects:
(id)lightOp.CGColor,
(id)darkOp.CGColor,
nil];
gradient.locations = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:0.5],
nil];
// Set bounds
gradient.frame = aView.bounds;
// Add the gradient to the view
[aView.layer insertSublayer:gradient atIndex:0];
}
Descubrí que al utilizar CAGradientLayer producía un degradado con un avance notable. Terminó usando este
Según esta pregunta Gradientes en UIView y UILabels en iPhone
Para las vistas que dibujan texto, como UILabel
, UITextView
y UITextField
, debe agregar el degradado dentro de la función drawRect
. (mira esta publicación para ver un ejemplo).
Hay algunas grandes subclases de UILabel
, UITextView
y UITextField
que le permiten agregar un gradiente con bastante facilidad (vea JBGradient en GitHub ).