2013-10-01 17 views
7

Teraz używamJak nadać NSText wielu cieniom?

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

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

z NSTextStorage dać tekst cień. Ale chcę zastosować więcej niż jeden cień, a dodanie kolejnego NSShadowAttributeName powoduje nadpisanie poprzedniej wartości.

Jak dodać więcej niż jeden cień? Czy można to zrobić przy pomocy CGContextSetShadowWithColor?

+0

Szukasz czegoś kolorowego do napisu wewnątrz tekstu? –

+0

Nie. Chcę tylko zastosować więcej niż jeden cień do tekstu. – zakdances

+0

Byłby to gr8, jeśli można wkleić wyjściową próbkę tutaj –

Odpowiedz

3

Nie jestem pewien, proszę spróbuj tego poniższego kodu do swojego widoku tekstowego. Kiedy piszesz ciąg wewnątrz TextView będzie zaznaczyć, że dużo zakres i na podstawie, że rysuje kolor: -

-(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

To nie jest kolor tła, który chcę. Chcę dodać więcej niż jeden cień ('NSShadowAttributeName'). – zakdances

2

Proponuję podejście „jaskiniowiec”. Zamiast próbować uzyskać powielone cienie, należy użyć zduplikowanych tekstów, z których wszystkie oprócz jednego mają kolor ustawiony na przezroczysty kolor i nadać im różne cienie.

  • Wykonaj dwa lub więcej tekstów w tym wierszu.
  • przednia najbardziej "prawdziwy" kolor tekstu.
  • sprawiają, że jasny tekst innego tekstu.
  • ustawić jeden typ cienia dla każdego typu tekstu.

Powinieneś być w stanie stworzyć klasę, która zautomatyzuje to, jeśli zamierzasz używać go wiele razy.

Jest to próbka tego, co mam:

enter image description here

oh-- jeśli nie zrobić dodatkowy tekst na Twój tekst pojawi się znacznie ciemniejszy/odważniejsze niż można się spodziewać.

+0

Niestety, zmiana przezroczystości koloru tekstu wydaje się również wpływać na przezroczystość cienia. Ponadto renderowanie wielu nakładających się widoków tekstowych jest dość nieefektywne, szczególnie gdy pracujesz z dużymi, wielostronicowymi dokumentami. – zakdances

Powiązane problemy