我有一个 UIVIew 的委托方法,并在 drawRect 方法中添加了 UIBezierPath 以在正方形上显示阴影。
//// General Declarations
CGContextRef context = UIGraphicsGetCurrentContext();
//// Shadow Declarations
UIColor* shadow = [UIColor blackColor];
CGSize shadowOffset = CGSizeMake(0, -0);
CGFloat shadowBlurRadius = 15;
//// Rectangle Drawing
rectanglePath = [UIBezierPath bezierPathWithRect: CGRectMake(8, 8, 44, 44)];
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, shadow.CGColor);
[[UIColor whiteColor] setFill];
[rectanglePath fill];
CGContextRestoreGState(context);
然后我想根据某些标准更改阴影的颜色,所以我创建了一个名为 makeRed 的方法。
- (void)makeRed {
NSLog(@"makeRed");
CGContextRef context = UIGraphicsGetCurrentContext();
// Shadow Declarations
UIColor* shadow = [UIColor redColor];
CGSize shadowOffset = CGSizeMake(0, -0);
CGFloat shadowBlurRadius = 15;
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, shadow.CGColor);
[[UIColor whiteColor] setFill];
[rectanglePath fill];
CGContextRestoreGState(context);
}
但是当我调用该方法时,我收到了消息:
: CGContextSaveGState: 无效的上下文 0x0
有什么想法可以设置正确的上下文或以不同的方式更改阴影颜色吗?
请注意,阴影的初始绘制效果很好,因为代理还有其他属性,即使用 .layer 方法创建阴影的一些精美动画将无法正常工作。
干杯