2012-05-25 2 views
2

Я искал, чтобы найти простой способ добавить тени к текст UITextView, как вы можете сделать в UILabel. Я нашел this question, где был ответ, который, мол, делает это, однако, не имеет никакого смысла, почему это должно быть так.Как добавить тени текста в UITextView?

Вопрос: Добавление теней к слою самого UITextView не должно влиять на текст внутри, скорее, он должен затенять весь объект, правильно?

В моем случае даже добавление тени к тексту текста не оказывает никакого влияния (даже после добавления заголовков QuartzCore).

ответ

6

@ ответ Adalı будет работать, но не так. Вы не должны добавлять тень к самому UITextView, чтобы визуализировать видимые объекты внутри. Как вы можете видеть, при применении тени к UITextView курсор также будет иметь тень.

Подход, который следует использовать, - NSAttributedString.

NSMutableAttributedString* attString = [[NSMutableAttributedString alloc] initWithString:textView.text]; 
NSRange range = NSMakeRange(0, [attString length]); 

[attString addAttribute:NSFontAttributeName value:textView.font range:range]; 
[attString addAttribute:NSForegroundColorAttributeName value:textView.textColor range:range]; 

NSShadow* shadow = [[NSShadow alloc] init]; 
shadow.shadowColor = [UIColor whiteColor]; 
shadow.shadowOffset = CGSizeMake(0.0f, 1.0f); 
[attString addAttribute:NSShadowAttributeName value:shadow range:range]; 

textView.attributedText = attString; 

Однако textView.attributedText для iOS6. Если вы должны поддерживать более низкие версии, вы можете использовать следующий подход.

CALayer *textLayer = (CALayer *)[textView.layer.sublayers objectAtIndex:0]; 
textLayer.shadowColor = [UIColor whiteColor].CGColor; 
textLayer.shadowOffset = CGSizeMake(0.0f, 1.0f); 
textLayer.shadowOpacity = 1.0f; 
textLayer.shadowRadius = 0.0f; 
+0

ха-ха, iOS6 не был выпущен, когда я ответил на этот вопрос :) – adali

+0

да, его трудно держать эти комментарии до настоящего времени: P – cnotethegr8

8

я попробовал, и обнаружил, что вы должны установить BackgroundColor в UITextView, чтобы прозрачный, поэтому тень должна работать

UITextView *text = [[[UITextView alloc] initWithFrame:CGRectMake(0, 0, 150, 100)] autorelease]; 
    text.layer.shadowColor = [[UIColor whiteColor] CGColor]; 
    text.layer.shadowOffset = CGSizeMake(2.0f, 2.0f); 
    text.layer.shadowOpacity = 1.0f; 
    text.layer.shadowRadius = 1.0f; 
    text.textColor = [UIColor blackColor]; 

      //here is important!!!! 
    text.backgroundColor = [UIColor clearColor]; 

    text.text = @"test\nok!"; 
    text.font = [UIFont systemFontOfSize:50]; 

    [self.view addSubview:text]; 

here is the effect

+0

работает, спасибо, оценить его – johnbakers

Смежные вопросы