Tengo una subclase uiview en la que intento dibujar un rectángulo redondeado con una sombra paralela. Aunque dibuja ambos elementos, puedo ver la sombra a través del relleno de rectángulo redondeado. Soy nuevo en CG, así que probablemente me esté perdiendo algo simple (aunque no parece ser el alfa del relleno que está configurado en 1). Aquí está el código dibujar rect.UIView con rectángulo redondeado y sombra paralela: la sombra aparece sobre el rectángulo
- (void)drawRect:(CGRect)rect {
// get the contect
CGContextRef context = UIGraphicsGetCurrentContext();
//for the shadow, save the state then draw the shadow
CGContextSaveGState(context);
CGContextSetShadow(context, CGSizeMake(4,-5), 10);
//now draw the rounded rectangle
CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0);
//since I need room in my rect for the shadow, make the rounded rectangle a little smaller than frame
CGRect rrect = CGRectMake(CGRectGetMinX(rect), CGRectGetMinY(rect), CGRectGetWidth(rect)-30, CGRectGetHeight(rect)-30);
CGFloat radius = self.cornerRadius;
// the rest is pretty much copied from Apples example
CGFloat minx = CGRectGetMinX(rrect), midx = CGRectGetMidX(rrect), maxx = CGRectGetMaxX(rrect);
CGFloat miny = CGRectGetMinY(rrect), midy = CGRectGetMidY(rrect), maxy = CGRectGetMaxY(rrect);
// Start at 1
CGContextMoveToPoint(context, minx, midy);
// Add an arc through 2 to 3
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
// Add an arc through 4 to 5
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
// Add an arc through 6 to 7
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
// Add an arc through 8 to 9
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
// Close the path
CGContextClosePath(context);
// Fill & stroke the path
CGContextDrawPath(context, kCGPathFillStroke);
//for the shadow
CGContextRestoreGState(context);
}
Leer esta entrada del blog http://bynomial.com/blog/?p=52&cpage=1#comment-1115. Responde cómo hacer esto. –
la solución documentada aquí es la mejor para mí, porque me muestra cómo usar una imagen personalizada (con maskToBounds = YES) además de la sombra. ¡Gracias! – Mark
@John: Muchas muchas gracias por el enlace, amigo ... Me ayudó a comenzar. :) – viral