objective developer apple objective-c macos text core-graphics osx-mountain-lion

objective c - developer - ¿Cómo le doy a NSText múltiples sombras?



objective c documentation (2)

En este momento estoy usando

NSShadow *textShadow = [NSShadow new]; textShadow.shadowBlurRadius = 5; textShadow.shadowColor = [[NSColor whiteColor] colorWithAlphaComponent:.5]; [self addAttribute:NSShadowAttributeName value:textShadow range:NSMakeRange(0, self.length)];

desde un NSTextStorage para dar sombra al texto. Pero quiero aplicar más de una sombra, y agregar otro NSShadowAttributeName simplemente sobrescribe el valor anterior.

¿Cómo puedo agregar más de una sombra? ¿Se puede hacer con CGContextSetShadowWithColor ?


No estoy seguro por favor intente este código a continuación para su texto. Cuando escribes una cadena dentro de la vista de texto, seleccionará ese rango y, basándose en eso, dibujará el color: -

-(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]; } } }


Yo sugeriría el enfoque de "cavernícola". En lugar de tratar de obtener sombras duplicadas, use los textos duplicados, todos menos uno de ellos tienen su color definido en el color claro, y asígneles diferentes sombras.

  • haga dos o más textos que se alineen exactamente.
  • haga que el frente sea su color de texto "real".
  • hacer el color claro del otro texto.
  • establece un tipo de sombra para cada tipo de texto.

Debería poder hacer una clase que automatice esto, si va a usarlo varias veces.

Esta es una muestra de lo que obtuve:

oh-- si no haces el texto adicional, tu texto aparecerá mucho más oscuro / más audaz de lo esperado.