如何为NSText提供多个阴影?

时间:2013-10-01 09:37:13

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

现在我正在使用

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完成?

2 个答案:

答案 0 :(得分:3)

不确定请在下面的代码中尝试使用textview。当您在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];

        }

    }
    }

答案 1 :(得分:2)

我会建议“穴居人”的做法。不要试图获得重复的阴影,而是使用重复的文本,除了其中一个的颜色设置为清晰的颜色,并给它们不同的dropShadows。

  • 制作两个以上的文本正好排成一行。
  • 使最前面的“真实”文字颜色。
  • 使其他文字的颜色清晰。
  • 为每种类型的文字设置一种阴影。

如果您打算多次使用它,您应该能够创建一个自动化的类。

这是我得到的样本:

enter image description here

哦 - 如果你没有制作附加文字,你的文字会比你想象的更暗/更大。