2012-02-27 10 views
-1

を動作していないが、そうではありません。CGContextSetShadowWithColorは、このコードは影を示すべきである

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); 

これは、それがこれまでのように見えるものです。

enter image description here

答えて

5

あなたが影を設定した後、あなたが何かを描画していない:影のコードは違いはありません。コンテキストを描画して画面に表示するには、パスをストロークまたは塗り潰す(CGContextStrokePath()またはCGContextFillPath())必要があります。

関連する問題