2013-10-01 6 views
7

は、今私は、テキストに影を与えることNSTextStorageからNSTextに複数の影を付けるにはどうしたらいいですか?

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

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

を使用しています。しかし、私は複数の影を適用したいのですが、別の影を追加するとNSShadowAttributeNameは前の値を上書きします。

複数のシャドウを追加するにはどうすればよいですか? CGContextSetShadowWithColorでこれを行うことはできますか?

+0

あなたは文字列内の文字列に何か色を探していますか? –

+0

いいえ、テキストに複数のドロップシャドウを適用したいだけです。 – zakdances

+0

ここに出力サンプルを貼り付けることができれば、それはgr8になります –

答えて

3

あなたのテキストビューの下にこのコードをお試しください。あなたは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 *[email protected]"\n"; 
      NSAttributedString *attr=[[NSAttributedString alloc]initWithString:str]; 
      [tv .textStorage appendAttributedString:attr]; 
      isNext=NO; 
     } 
     if (isNext==YES) 
     { 
      NSString *[email protected]"\n"; 
      NSAttributedString *attr=[[NSAttributedString alloc]initWithString:str]; 
      [tv .textStorage appendAttributedString:attr]; 

     } 

    } 
    } 
+0

私が望む背景色ではありません。私は複数のドロップシャドウ( 'NSShadowAttributeName')を追加したいと思います。 – zakdances

2

を私は「穴居人」のアプローチを示唆しています。重複した影を取得しようとするのではなく、重複したテキストを使用してください。そのうちの1つを除くすべてが透明な色に設定されていて、異なるdropShadowsを与えます。

  • 2つ以上のテキストを正確に並べます。
  • フロントを最もリアルな「テキスト」色にします。
  • 他のテキストのクリアカラーを作成します。
  • は、テキストの種類ごとに1つのタイプの影を設定します。

複数回使用する場合は、これを自動化するクラスを作成する必要があります。

これは私が得たもののサンプルです:

enter image description here

OH - あなたは追加のテキストのテキストが予想よりも大胆/ずっと暗く表示されますことはありません場合。

+0

残念ながら、テキストカラーの不透明度を変更すると、シャドウの不透明度にも影響するようです。また、複数の重複するテキストビューをレンダリングすることは、特に大規模な複数ページのドキュメントを扱う場合には、非常に非効率的です。 – zakdances

関連する問題