1
Donc, en utilisant ce lien: How do I draw a shadow under a UIView?UIView arrondi avec ombre?
Et ce lien: http://iphonedevelopment.blogspot.com/2008/11/creating-transparent-uiviews-rounded.html
Je suis venu sur cette mise en œuvre:
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextSetShadow(context, CGSizeMake(-15.0f, 20.0f), 5.0f);
CGContextSetLineWidth(context, strokeWidth);
CGContextSetStrokeColorWithColor(context, self.strokeColor.CGColor);
CGContextSetFillColorWithColor(context, self.rectColor.CGColor);
CGRect rrect = self.bounds;
CGFloat radius = cornerRadius;
CGFloat width = CGRectGetWidth(rrect);
CGFloat height = CGRectGetHeight(rrect);
// Make sure corner radius isn't larger than half the shorter side
if (radius > width/2.0)
radius = width/2.0;
if (radius > height/2.0)
radius = height/2.0;
CGFloat minx = CGRectGetMinX(rrect);
CGFloat midx = CGRectGetMidX(rrect);
CGFloat maxx = CGRectGetMaxX(rrect);
CGFloat miny = CGRectGetMinY(rrect);
CGFloat midy = CGRectGetMidY(rrect);
CGFloat maxy = CGRectGetMaxY(rrect);
CGContextMoveToPoint(context, minx, midy);
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
CGContextClosePath(context);
CGContextDrawPath(context, kCGPathFillStroke);
CGContextRestoreGState(context);
}
Cependant, quand il dessine, l'ombre est clipsé aux limites de la vue. J'ai essayé de régler self.clipsToBounds = NO mais cela n'affecte pas le problème.
Cela a été répondu à un an plus tard sur une autre question: http://stackoverflow.com/questions/3690972/why-maskstobounds-yes-prevents-calayer-shadow Trick est d'avoir 2 UIViews. .. (un pour les virages ronds dans l'autre pour l'ombrage) –