This code should be showing a shadow, but it isn't:
CGContextRef context = UIGraphicsGetCurrentContext();
//Border
CGMutablePathRef outerPath = createRoundedRectForRect(self.bounds, MENU_BUTTON_OUTER_RADIUS);
CGContextSetFillColorWithColor(context, [[UIColor colorWithWhite:0 alpha:0.18] CGColor]);
CGContextAddPath(context, outerPath);
CGContextFillPath(context);
//Button
UIColor *buttonColor;
if (self.type == JMenuButtonTypeBlack) {
buttonColor = [UIColor colorWithWhite:0 alpha:1.0];
}
else if (self.type == JMenuButtonTypeWhite) {
buttonColor = [UIColor colorWithWhite:0.72 alpha:1.0];
}
CGRect insideRect = rectForRectWithInset(self.bounds, 3);
CGMutablePathRef innerPath = createRoundedRectForRect(insideRect, MENU_BUTTON_INNER_RADIUS);
CGPoint gradientTop = CGPointMake(0, insideRect.origin.y);
CGPoint gradientBottom = CGPointMake(0, insideRect.origin.y + insideRect.size.height);
//Base color
CGContextSaveGState(context);
CGContextSetFillColorWithColor(context, [buttonColor CGColor]);
CGContextAddPath(context, innerPath);
CGContextFillPath(context);
CGContextRestoreGState(context);
//Gradient 1
CGContextSaveGState(context);
CGFloat colors [] = {
1.0, 1.0, 1.0, 0.16,
0.0, 0.0, 0.0, 0.11
};
CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColorComponents(baseSpace, colors, NULL, 2);
CGContextAddPath(context, innerPath);
CGContextClip(context);
CGContextDrawLinearGradient(context, gradient, gradientTop, gradientBottom, 0);
CGGradientRelease(gradient), gradient = NULL;
CGColorSpaceRelease(baseSpace), baseSpace = NULL;
CGContextRestoreGState(context);
//Shadow
CGContextSaveGState(context);
CGContextAddPath(context, innerPath);
CGContextSetShadowWithColor(context, CGSizeMake(0, 2), 3.0, [[UIColor blackColor] CGColor]);
CGContextRestoreGState(context);
This is what it looks like so far. The shadow code doesn't make a difference:
You're not drawing anything after you set the shadow. You need to either stroke or fill (CGContextStrokePath() or CGContextFillPath()) the path in order for it to be drawn into the context and thus appear on screen.
ReplyDelete