Ho una sottoclasse uiview in cui sto cercando di disegnare un rettangolo arrotondato con un'ombra esterna. Sebbene disegna entrambi gli elementi, posso vedere l'ombra attraverso il riempimento arrotondato del rettangolo. Sono nuovo di CG quindi probabilmente mi manca qualcosa di semplice (anche se non sembra essere l'alfa del riempimento che è impostato su 1). Ecco il codice rect draw.UIView con rettangolo arrotondato e ombra esterna: l'ombra appare sopra il rettangolo
- (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);
}
leggere questo post del blog http://bynomial.com/blog/?p=52&cpage=1#comment-1115. Risponde come fare questo. –
la soluzione documentata qui è la migliore per me, perché mi mostra come utilizzare un'immagine personalizzata (con maskToBounds = YES) e l'ombra. Grazie! – Mark
@ John: Molte molte grazie per il collegamento, amico ... mi ha aiutato a iniziare. :) – viral