2

UILabelで実行できるように、UITextViewのテキストにシャドウを追加する簡単な方法を探しています。私はこれを行うと思われる答えがあったところでこの質問を見つけました、しかし、なぜこれが当てはまるのか意味がありません。

質問:UITextView自体のレイヤーにシャドウを追加しても、内部のテキストに影響を与えることはなく、オブジェクト全体をシャドウする必要があります。

私の場合、テキストビューのレイヤーにシャドウを追加しても効果はありません(QuartzCoreヘッダーを追加した後でも)。

4

2 に答える 2

8

試してみたところ、UITextViewのbackgroundcolorをtransparentに設定して、シャドウが機能するようにする必要があることがわかりました。

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

これが効果です

于 2012-05-25T06:01:00.887 に答える
6

@adaliの答えは機能しますが、間違っています。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;
于 2013-05-16T06:41:54.803 に答える