【问题标题】:How do I give NSText multiple shadows?如何给 NSText 多个阴影?
【发布时间】:2013-10-07 09:55:34
【问题描述】:

我现在正在使用

NSShadow *textShadow = [NSShadow new];
textShadow.shadowBlurRadius = 5;
textShadow.shadowColor = [[NSColor whiteColor] colorWithAlphaComponent:.5];

[self addAttribute:NSShadowAttributeName value:textShadow range:NSMakeRange(0, self.length)];

从一个 NSTextStorage 给文本一个阴影。但我想应用多个阴影,而添加另一个 NSShadowAttributeName 只会覆盖之前的值。

如何添加多个阴影?可以用CGContextSetShadowWithColor完成吗?

【问题讨论】:

  • 您是否正在寻找一些颜色以在 textview 中进行字符串处理??
  • 没有。我只想对文本应用多个阴影。
  • 如果您可以在此处粘贴输出示例,那就是 gr8

标签: objective-c macos text core-graphics osx-mountain-lion


【解决方案1】:

不确定请为您的文本视图尝试以下代码。当您在 textview 中写入字符串时,它将选择那么多范围并在此基础上绘制颜色:-

-(IBAction)createNewTabView:(id)sender
{
   NSString *allTheText =[tv string];
    NSArray *lines = [allTheText componentsSeparatedByString:@"\n"];
    NSString *str=[[NSString alloc]init];
    NSMutableAttributedString *attr;
    BOOL isNext=YES;
    [tv setString:@""];
    for (str in lines)
    {
        attr=[[NSMutableAttributedString alloc]initWithString:str];
        if ([str length] > 0)
        {

        NSRange range=NSMakeRange(0, [str length]);
        [attr addAttribute:NSBackgroundColorAttributeName value:[NSColor greenColor] range:range];
        [tv .textStorage appendAttributedString:attr];
            isNext=YES;
        }
        else
        {
            NSString *str=@"\n";
            NSAttributedString *attr=[[NSAttributedString alloc]initWithString:str];
            [tv .textStorage appendAttributedString:attr];
            isNext=NO;
        }
        if (isNext==YES)
        {
            NSString *str=@"\n";
            NSAttributedString *attr=[[NSAttributedString alloc]initWithString:str];
            [tv .textStorage appendAttributedString:attr];

        }

    }
    }

【讨论】:

  • 这不是我想要的背景颜色。我想添加多个阴影 (NSShadowAttributeName)。
【解决方案2】:

我建议采用“穴居人”方法。与其尝试获得重复的阴影,不如使用重复的文本,除了其中一个之外,所有文本都将其颜色设置为清晰的颜色,并为它们提供不同的 dropShadows。

  • 制作两个或多个完全对齐的文本。
  • 让最前面成为您“真正的”文本颜色。
  • 使其他文本的颜色清晰。
  • 为每种类型的文本设置一种阴影。

如果您要多次使用它,您应该能够创建一个自动执行此操作的类。

这是我得到的样本:

哦——如果你不添加额外的文字,你的文字会比你预期的更暗/更粗。

【讨论】:

  • 不幸的是,更改文本颜色的不透明度似乎也会影响阴影的不透明度。此外,渲染多个重叠的文本视图效率非常低,尤其是在处理大型多页文档时。
猜你喜欢
  • 2011-04-09
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多