在此输入图像描述

我可以知道如何将浮雕效果作为图片上显示的文字“ 提醒 ”吗?

它看起来像是嵌入了文本?

谢谢

===============>>#1 票数:90 已采纳

适用于iOS 7.0的更新

在iOS 7.0中,Apple为属性字符串添加了一个新属性NSTextEffectAttributeName 如果部署目标是iOS 7.0或更高版本,则可以将此属性设置为NSTextEffectLetterpressStyle以在浮雕样式中绘制属性字符串。

原版的

我不能肯定Apple如何绘制浮雕文字。 它看起来像是用红色填充字符串字形,然后在字形的内边缘周围应用阴影,并在字形的顶部外边缘应用非常微弱的阴影。 我试了一下,这就是它的样子:

iPhone模拟器屏幕截图

最重要的是我的渲染。 下面是一个简单的UILabel,带有影子,克里斯在他的回答中提出。 我在后台放了一个Reminders应用程序的屏幕截图。

这是我的代码。

首先,您需要一个能够创建字符串图像蒙版的函数。 您将使用蒙版来绘制字符串本身,然后绘制仅出现在字符串内边缘周围的阴影。 此图像只有一个alpha通道,没有RGB通道。

- (UIImage *)maskWithString:(NSString *)string font:(UIFont *)font size:(CGSize)size
{
    CGRect rect = { CGPointZero, size };
    CGFloat scale = [UIScreen mainScreen].scale;
    CGColorSpaceRef grayscale = CGColorSpaceCreateDeviceGray();
    CGContextRef gc = CGBitmapContextCreate(NULL, size.width * scale, size.height * scale, 8, size.width * scale, grayscale, kCGImageAlphaOnly);
    CGContextScaleCTM(gc, scale, scale);
    CGColorSpaceRelease(grayscale);
    UIGraphicsPushContext(gc); {
        [[UIColor whiteColor] setFill];
        [string drawInRect:rect withFont:font];
    } UIGraphicsPopContext();

    CGImageRef cgImage = CGBitmapContextCreateImage(gc);
    CGContextRelease(gc);
    UIImage *image = [UIImage imageWithCGImage:cgImage scale:scale orientation:UIImageOrientationDownMirrored];
    CGImageRelease(cgImage);

    return image;
}

其次,您需要一个反转该掩码的函数。 您将使用它来使CoreGraphics在字符串的内边缘周围绘制阴影。 这需要是一个完整的RGBA图像。 (iOS似乎不支持灰度+ alpha图像。)

- (UIImage *)invertedMaskWithMask:(UIImage *)mask
{
    CGRect rect = { CGPointZero, mask.size };
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, mask.scale); {
        [[UIColor blackColor] setFill];
        UIRectFill(rect);
        CGContextClipToMask(UIGraphicsGetCurrentContext(), rect, mask.CGImage);
        CGContextClearRect(UIGraphicsGetCurrentContext(), rect);
    }
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

您可以在函数中使用这些函数,该函数以红色绘制字符串并将阴影应用于其内部边缘。

-(UIImage *)imageWithInteriorShadowAndString:(NSString *)string font:(UIFont *)font textColor:(UIColor *)textColor size:(CGSize)size
{
    CGRect rect = { CGPointZero, size };
    UIImage *mask = [self maskWithString:string font:font size:rect.size];
    UIImage *invertedMask = [self invertedMaskWithMask:mask];
    UIImage *image;
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale); {
        CGContextRef gc = UIGraphicsGetCurrentContext();
        // Clip to the mask that only allows drawing inside the string's image.
        CGContextClipToMask(gc, rect, mask.CGImage);
        // We apply the mask twice because we're going to draw through it twice.
        // Only applying it once would make the edges too sharp.
        CGContextClipToMask(gc, rect, mask.CGImage);
        mask = nil; // done with mask; let ARC free it

        // Draw the red text.
        [textColor setFill];
        CGContextFillRect(gc, rect);

        // Draw the interior shadow.
        CGContextSetShadowWithColor(gc, CGSizeZero, 1.6, [UIColor colorWithWhite:.3 alpha:1].CGColor);
        [invertedMask drawAtPoint:CGPointZero];
        invertedMask = nil; // done with invertedMask; let ARC free it

        image = UIGraphicsGetImageFromCurrentImageContext();
    }
    UIGraphicsEndImageContext();
    return image;
}

接下来,您需要一个获取图像并返回带有微弱向上阴影的副本的函数。

- (UIImage *)imageWithUpwardShadowAndImage:(UIImage *)image
{
    UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale); {
        CGContextSetShadowWithColor(UIGraphicsGetCurrentContext(), CGSizeMake(0, -1), 1, [UIColor colorWithWhite:0 alpha:.15].CGColor);
        [image drawAtPoint:CGPointZero];
    }
    UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return resultImage;
}

最后,您可以组合这些功能来创建字符串的浮雕图像。 我把我的最终图像放到UIImageView以便于测试。

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect rect = self.imageView.bounds;
    NSString *string = @"Reminders";
    UIFont *font = [UIFont systemFontOfSize:33];
    UIImage *interiorShadowImage = [self imageWithInteriorShadowAndString:string
        font:font
        textColor:[UIColor colorWithHue:0 saturation:.9 brightness:.7 alpha:1]
        size:rect.size];
    UIImage *finalImage = [self imageWithUpwardShadowAndImage:interiorShadowImage];

    self.imageView.image = finalImage;
}

===============>>#2 票数:5

这看起来就像是文本周围的阴影。 您在IB中设置文本颜色的相同区域中设置它 - 为阴影选择合适的颜色并设置阴影偏移的方式(在您发布的示例中,看起来它们将阴影颜色设置为相同的颜色作为文本并将其偏移0水平和-1垂直(这意味着一个像素向上)。

在代码中,属性设置如下(假设您已经设置了一个名为“标签”的UILabel:

label.shadowColor = [UIColor blackColor]; // Choose your color here - in the example
                                          // posted, they probably chose a similar color
                                          // to the text color and then set the alpha
                                          // down around 0.7 or so so the shadow would be
                                          // faint.
label.shadowOffset = CGSizeMake(0,-1);    // First parameter is horizontal, second is vertical

===============>>#3 票数:4

您可以根据此示例配置效果 在此输入图像描述

  ask by Jackson Tale translate from so

未解决问题?本站智能推荐:

1回复

厚阴影,UILabel上没有模糊

我试图在不加任何模糊的情况下向UILabel添加浓密的阴影。 在photoshop中,我将使用“ Spread”选项使阴影看起来像这样。 它适用于我正在开发的应用中的漫画主题UI。 我不能使用图像,因为文本是动态的,并且对于每个用户而言都是不同的。 这是我想要的(左侧),这是到目前为
1回复

在带有阴影的UILabel上使用SizeToFit()?

我有一些UILabel元素,可以动态更改其文本。 我还使用label.Layer.ShadowOffset和dito color向标签添加阴影。 标签的文本更改后,我使用SizeToFit 。 问题:该方法没有考虑阴影-导致标签太小而阴影被切掉。 有没有简单的方法可以解决此问题,
1回复

在UILabel上需要更深的阴影

我创建了带有阴影的标签: 标签位于淡入淡出的图像背景上。 由于是白色,有时在较浅的背景上很难看懂。 半径增加得越多,阴影就越少。...是否可以使阴影更暗或使标签“弹出”更多? 还有其他建议会有所帮助吗?
14回复

iPhone UILabel文字软阴影

我知道iPhone上开箱即用的UILabel不支持柔和阴影。 那么实现我自己的最佳方式是什么? 编辑: 显然我会将UILabel子类化并绘制-drawRect:我的问题是,如何将标签的内容作为图形获取并在它们周围绘制,模糊它们等... 编辑2: 一年后我回到了这个问题。
2回复

添加阴影是UILabel错误

我有UILabel showtext并且我写了类似的代码 并且显示错误“正在访问属性的未知“ showOpticity”组件”。 有人可以帮忙吗?
3回复

将内阴影应用于UILabel [复制]

这个问题在这里已有答案: UIView图层的内阴影效果? 16个答案 我想将内阴影应用于UILabel。 我有一个解决方案,但它还不够好。 谁有更好的解决方案? 我熟悉UILabel的图层属性,但shadow offset给我们一个外阴影,而不是内阴影
3回复

iOS - 影子在UILabel传播

我想在我的UILabel中增加阴影的传播,但我找不到属性来做到这一点。 我在下面添加了一张照片来说明问题。 顶部标签是我能够在Photoshop中创建的所需效果。 底部标签说明了我能够在iOS中找到的属性。 这是我用于底部标签的代码。 我确实找到了使用第二个标签作为阴影
1回复

iOS UILabel阴影生成奇怪的上部阴影

我试图将阴影应用到UILabel,但是字体上出现了难看的上部阴影。 如您所见,阴影已经离字体很远了,但是我得到的是上面阴影的东西……字体应该是纯白色的。 任何想法? 我可以在上面放另一个UILabel,但是我认为这不是最干净的解决方案...
2回复

什么是UILabel默认shadowRadius?

我使用QuartzCore在UITableViewCell中设置UILabel阴影: 但是由于性能降低,我必须实现-(void)drawRect:(CGRect)rect方法。 最近,我发现可以使用UILabel的属性设置阴影: 现在,我想删除drawRect:实现并仅通过属性
3回复

UILabel暗影有不需要的切断

我有一个UILabel,我添加了一个阴影。 UILabel显示阴影,阴影也被显示,但最左边的阴影被切掉,以便它与文本的边缘对齐。 我移动了标签的位置,看它是否被视图覆盖,但一切都保持不变。 我也拿出了sizeToFit,它保持不变。 这是标签的初始化: