CGContextSetShadowWithColor не работает - PullRequest
0 голосов
/ 27 февраля 2012

Этот код должен показывать тень, но это не так:

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

1 Ответ

5 голосов
/ 27 февраля 2012

Вы ничего не рисуете после того, как установили тень.Вам нужно либо обвести, либо заполнить (CGContextStrokePath() или CGContextFillPath()) путь, чтобы его можно было нарисовать в контексте и, таким образом, отобразить на экране.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...