2016-12-26 6 views
0

Мы можем установить CGColor в качестве заливки или цвета обводки для данного контекста, делая что-то вроде:Core Graphics - есть ли способ получить/получить текущий CGColor из CGContext?

UIColor *color = [UIColor whiteColor]; 
CGContextRef ctx = UIGraphicsGetCurrentContext(); 
CGContextSetFillColorWithColor(ctx, color.CGColor); 

Но как мы можем получить или получить в настоящее время набора заполнения или цвета мазка из данного контекста?

Так есть ли API что-то вроде:

CGColorRef CGContextGetFillColorFromContext(CGContextRef c) 

который принимает CGContext в качестве входного параметра и возвращает его в настоящее время установить Fill или инсульт CGColour? Если нет, то есть ли какой-то другой косвенный способ достичь этого?

Я надеюсь на выше, потому что цвет установлен в одном классе, и это необходимо еще в каком-то другом классе, как так:

В 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 + моя_категории. м

-(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}]; 
} 

ответ

1

Так есть ли что-то вроде API

Нет, нет, потому что не должно быть.

Но как мы можем получить или получить в настоящее время заданный цвет заливки или штриха из заданного контекста?

Простой ответ заключается в том, что вы можете не возможно не знаю, что текущий установленный цвет, потому что вы сами были тот, кто поставил его, как и в строке вы сами процитировать:

CGContextSetFillColorWithColor(ctx, color.CGColor); 

Если вы знаете, что вам понадобится этот цвет в другом месте, запишите его в переменной (например, переменную экземпляра, если информация должна быть доступна из другого метода в другое время). Планируйте заранее свои собственные будущие потребности; это то, что программирование -.

+0

Спасибо за ваш ответ. Запись его в переменную является одним из очевидных решений, которые я планировал использовать, если нет способа получить его непосредственно из CGContext. Я обновил свой вопрос, чтобы уделить больше внимания тому, почему я надеялся на такой API. – archeopetrix

+0

Но, как вы подтвердили, нет прямого способа получить его из текущего CGContext, поэтому я могу либо: (i) изменить вышеуказанный метод в категории NSString, чтобы принять еще один параметр (для используемого цвета) или (ii) хранить/записывать цвет в свойстве некоторого синглтона и получать доступ к нему оттуда в методе категории. Пожалуйста, исправьте меня, если я ошибаюсь Еще раз спасибо за вашу помощь. Многие ваши ответы здесь на SO были действительно полезны в прошлом. – archeopetrix