gpt4 book ai didi

objective-c - 核心 TextView 具有黑色背景色

转载 作者:太空狗 更新时间:2023-10-30 03:40:55 26 4
gpt4 key购买 nike


我有一个使用 CoreText 呈现一些文本的 UIView,一切正常,除了整个 View 具有黑色背景颜色这一事实。我已经尝试过最基本的解决方案,例如

[self setBackgroundColor:[UIColor clearColor]];

CGFloat components[] = {0.f, 0.f, 0.f, 0.f };
CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
CGColorRef transparent = CGColorCreate(rgbColorSpace, components);
CGContextSetFillColorWithColor(context, transparent);
CFRelease(transparent);

但这根本没有帮助。
我只是在这个问题上苦思冥想,因为我不太明白真正的核心文本是如何工作的以及这个纯 C 层是如何相关的与所有其他 objective-c 的东西。这对解决这个问题没有多大帮助,所以我问你们,你们能不能给我一个解决方案和(最重要的)关于它的解释。

仅供引用,我还发布了 CoreText View 的代码。
它全部基于 2 个函数:parseText,它构建了 CFAttributedString 和drawRect 负责绘图部分。

-(void) parseText {
NSLog(@"rendering this text: %@", symbolHTML);
attrString = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0);
CFAttributedStringReplaceString (attrString, CFRangeMake(0, 0), (CFStringRef)symbolHTML);

CFStringRef fontName = (CFStringRef)@"MetaSerif-Book-Accent";
CTFontRef myFont = CTFontCreateWithName((CFStringRef)fontName, 18.f, NULL);
CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat components[] = { 1.0, 0.3f, 0.3f, 1.f };
CGColorRef redd = CGColorCreate(rgbColorSpace, components);
CFAttributedStringSetAttribute(attrString, CFRangeMake(0,0),
kCTForegroundColorAttributeName, redd);
CFRelease(redd);

CFAttributedStringSetAttribute(attrString, CFRangeMake(0, CFStringGetLength((CFStringRef)symbolHTML)), kCTFontAttributeName, myFont);



CTTextAlignment alignment = kCTLeftTextAlignment;
CTParagraphStyleSetting settings[] = {
{kCTParagraphStyleSpecifierAlignment, sizeof(alignment), &alignment}
};
CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(settings, sizeof(settings) / sizeof(settings[0]));
CFAttributedStringSetAttribute(attrString, CFRangeMake(0, CFStringGetLength((CFStringRef)attrString)), kCTParagraphStyleAttributeName, paragraphStyle);

[self calculateHeight];
}

这是 DrawRect 函数:

- (void)drawRect:(CGRect)rect {
/* get the context */
CGContextRef context = UIGraphicsGetCurrentContext();


/* flip the coordinate system */

float viewHeight = self.bounds.size.height;
CGContextTranslateCTM(context, 0, viewHeight);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0, 1.0));


/* generate the path for the text */
CGMutablePathRef path = CGPathCreateMutable();
CGRect bounds = CGRectMake(0, 0, self.bounds.size.width-20.0, self.bounds.size.height);
CGPathAddRect(path, NULL, bounds);


/* draw the text */
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter,
CFRangeMake(0, 0), path, NULL);
CFRelease(framesetter);
CFRelease(path);
CTFrameDraw(frame, context);
CGFloat components[] = {0.f, 0.f, 0.f, 0.f };
CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
CGColorRef transparent = CGColorCreate(rgbColorSpace, components);
CGContextSetFillColorWithColor(context, transparent);
CFRelease(transparent);
}

我希望一切都清楚,但如果有什么看起来令人困惑,尽管提问,我很乐意更好地解释自己。

提前感谢您解决这个核心问题:)
k

最佳答案

这里有一个问题。你记得设置 view.opaque = NO 吗?因为如果不这样做,无论您做什么,您都会得到黑色背景。

关于objective-c - 核心 TextView 具有黑色背景色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5005362/

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