Ios 核心图形-是否有方法从CGContext获取/检索当前设置的CGColor?

Ios 核心图形-是否有方法从CGContext获取/检索当前设置的CGColor?,ios,objective-c,macos,core-graphics,Ios,Objective C,Macos,Core Graphics,我们可以通过以下操作将CGColor设置为给定上下文的填充或笔划颜色: UIColor *color = [UIColor whiteColor]; CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(ctx, color.CGColor); CGColorRef CGContextGetFillColorFromContext(CGContextRef c) 但我们如何从给定的上下

我们可以通过以下操作将CGColor设置为给定上下文的填充或笔划颜色:

UIColor *color = [UIColor whiteColor];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(ctx, color.CGColor);
CGColorRef CGContextGetFillColorFromContext(CGContextRef c)
但我们如何从给定的上下文中获取或检索当前设置的填充或笔划颜色

那么,是否有类似以下内容的API:

UIColor *color = [UIColor whiteColor];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(ctx, color.CGColor);
CGColorRef CGContextGetFillColorFromContext(CGContextRef c)
哪个将CGContext作为输入参数并返回当前设置的填充或笔划CGCOLOR?如果不是这样,那么是否有其他间接方法来实现这一点

我希望能达到上述效果,因为颜色是在一个类中设置的,而在其他类中需要这样做:

在MyView.m中

- (void)drawRect:(CGRect)rect {
    [[UIColor whiteColor] set]
    //[@“Hello” drawInRect:rect withFont:titleFont lineBreakMode:UILineBreakModeCharacterWrap alignment:UITextAlignmentLeft]; //draws text in the rect with white font colour but removed becasue of API deprecation
    [@“Hello” my_drawInRect:rect withFont:titleFont lineBreakMode:NSLineBreakByCharWrapping alignment:NSTextAlignmentLeft]; 
}
在NSString+MyCategory.m中

-(void)my_drawInRect:(CGRect)rect withFont:(UIFont *)font lineBreakMode:(NSLineBreakMode)lineBreakMode alignment:(NSTextAlignment)alignment {
    NSMutableParagraphStyle* paragraphStyle = [NSMutableParagraphStyle new];
    paragraphStyle.lineBreakMode = lineBreakMode;
    paragraphStyle.alignment = alignment;
    UIColor* color = nil; //Hoping to get it from UIGraphicsGetCurrentContext();
    [self drawInRect:rect withAttributes:@{NSFontAttributeName:font, NSParagraphStyleAttributeName:paragraphStyle, NSForegroundColorAttributeName:color}];
}
那么有没有类似的API

不,没有,因为不需要

但我们如何从给定的上下文中获取或检索当前设置的填充或笔划颜色

简单的回答是,你不可能不知道当前设置的颜色是什么,因为你自己是设置颜色的人,正如你自己引用的那句话:

CGContextSetFillColorWithColor(ctx, color.CGColor);
如果您知道您将在其他地方需要该颜色,请将其记录在一个变量中(例如,如果需要在其他时间从另一个方法获取信息,则记录在一个实例变量中)。为自己未来的需要提前计划;这就是编程

那么有没有类似的API

不,没有,因为不需要

但我们如何从给定的上下文中获取或检索当前设置的填充或笔划颜色

简单的回答是,你不可能不知道当前设置的颜色是什么,因为你自己是设置颜色的人,正如你自己引用的那句话:

CGContextSetFillColorWithColor(ctx, color.CGColor);

如果您知道您将在其他地方需要该颜色,请将其记录在一个变量中(例如,如果需要在其他时间从另一个方法获取信息,则记录在一个实例变量中)。为自己未来的需要提前计划;这就是编程。

谢谢您的回复。在变量中记录它是我计划使用的一个明显的解决方案,以防无法直接从CGContext获取它。我已经更新了我的问题,为我为什么希望有这样一个API提供了更多的上下文。但正如您确认的那样,没有直接的方法可以从当前的CGContext获得它,因此我可以:(I)修改NSString类别中的上述方法,以接受更多的参数(用于颜色)或(ii)将颜色存储/记录在某个单例的属性中,然后在category方法中从该属性访问它。如果我错了,请纠正我。再次感谢你的帮助。你在这里的很多答案在过去都很有帮助。谢谢你的回复。在变量中记录它是我计划使用的一个明显的解决方案,以防无法直接从CGContext获取它。我已经更新了我的问题,为我为什么希望有这样一个API提供了更多的上下文。但正如您确认的那样,没有直接的方法可以从当前的CGContext获得它,因此我可以:(I)修改NSString类别中的上述方法,以接受更多的参数(用于颜色)或(ii)将颜色存储/记录在某个单例的属性中,然后在category方法中从该属性访问它。如果我错了,请纠正我。再次感谢你的帮助。你在这里的很多答案在过去都非常有用。