gpt4 book ai didi

objective-c - 更改 UIBezierPath 上阴影的颜色

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:39 26 4
gpt4 key购买 nike

我有一个 UIVIew 的委托(delegate)方法,在 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

有什么想法可以设置正确的上下文或以不同的方式更改阴影颜色吗?

请注意阴影的初始绘制工作完美,因为委托(delegate)还有其他属性,即一些使用 .layer 方法创建阴影的奇特动画将无法工作。

干杯

最佳答案

UIView文档你可以看到drawRect:

By the time this method is called, UIKit has configured the drawing environment appropriately for your view and you can simply call whatever drawing methods and functions you need to render your content.

所以您在 drawRect: 中所做的绘图是正确的,因为绘图上下文设置正确等,这在您的 makeRed 方法中不是这种情况。

我建议使用ivar shadowColor 然后在您的drawRect: 方法中使用它。您的 makeRed 将如下所示

- (void)makeRed;
{
self.shadowColor = [UIColor redColor];
[self setNeedsDisplay];
}

然后将drawRect:中的行修改为

CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, self.shadowColor.CGColor);

setNeedsDisplay 用于告诉 UIKit 您希望重绘 View ,然后再次调用 drawRect:

当然,您必须在 init* 方法中初始化 _shadowColor = [UIColor blackColor]

关于objective-c - 更改 UIBezierPath 上阴影的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12631550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com