gpt4 book ai didi

uilabel - drawRect 绘制 'transparent' 文本?

转载 作者:行者123 更新时间:2023-12-04 01:45:14 24 4
gpt4 key购买 nike

我希望将 UILabel(最好通过子类化)绘制为透明标签,但具有纯色背景。我画了一个简单的例子(对不起,它很丑,但它得到了要点:))。

基本上我有一个 UILabel 并且我希望背景是固定颜色,并且文本应该是透明的。我不想用 View 背景为文本着色,而是让它 100% 透明,因为我在背景中有一个纹理,我想确保标签内外对齐。

我花了一个晚上浏览 SO 并在谷歌上搜索,但我没有找到有用的资源。我在 CG 绘图方面没有太多经验,所以我很感激任何链接、帮助、教程或示例代码(也许 Apple 有一些我需要看看?)。

谢谢一堆!

enter image description here

最佳答案

我几乎使用任何代码将其重写为 UILabel 子类,并将其发布在 GitHub 上。

它的要点是你覆盖 drawRect 但调用 [super drawRect:rect]让 UILabel 正常呈现。使用白色标签颜色可以让您轻松地将标签本身用作掩码。

- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();

// let the superclass draw the label normally
[super drawRect:rect];

CGContextConcatCTM(context, CGAffineTransformMake(1, 0, 0, -1, 0, CGRectGetHeight(rect)));

// create a mask from the normally rendered text
CGImageRef image = CGBitmapContextCreateImage(context);
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(image), CGImageGetHeight(image), CGImageGetBitsPerComponent(image), CGImageGetBitsPerPixel(image), CGImageGetBytesPerRow(image), CGImageGetDataProvider(image), CGImageGetDecode(image), CGImageGetShouldInterpolate(image));

CFRelease(image); image = NULL;

// wipe the slate clean
CGContextClearRect(context, rect);

CGContextSaveGState(context);
CGContextClipToMask(context, rect, mask);

CFRelease(mask); mask = NULL;

[self RS_drawBackgroundInRect:rect];

CGContextRestoreGState(context);

}

关于uilabel - drawRect 绘制 'transparent' 文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8721019/

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