55

?のテキストに影を付けることはできUITextFieldますか?

4

4 に答える 4

178

3.2以降、CALayerシャドウプロパティを使用できます。

_textField.layer.shadowOpacity = 1.0;   
_textField.layer.shadowRadius = 0.0;
_textField.layer.shadowColor = [UIColor blackColor].CGColor;
_textField.layer.shadowOffset = CGSizeMake(0.0, -1.0);
于 2010-10-29T05:27:39.777 に答える
74

少し異なる問題があります-UILabelにぼやけた影が必要です。幸いなことに、これに対する解決策は、Tyler の番号 (2) であることが判明しました。

これが私のコードです:

- (void) drawTextInRect:(CGRect)rect {
    CGSize myShadowOffset = CGSizeMake(4, -4);
    CGFloat myColorValues[] = {0, 0, 0, .8};

    CGContextRef myContext = UIGraphicsGetCurrentContext();
    CGContextSaveGState(myContext);

    CGColorSpaceRef myColorSpace = CGColorSpaceCreateDeviceRGB();
    CGColorRef myColor = CGColorCreate(myColorSpace, myColorValues);
    CGContextSetShadowWithColor (myContext, myShadowOffset, 5, myColor);

    [super drawTextInRect:rect];

    CGColorRelease(myColor);
    CGColorSpaceRelease(myColorSpace); 

    CGContextRestoreGState(myContext);
}

これは、UILabel から拡張されたクラスで、テキストを下と右 4px に影を付けて描画します。影は不透明度 80% の灰色で、ぼやけています。

Tyler のソリューション番号 2 は、Tyler の番号 1 よりもパフォーマンスが少し優れていると思います。ビューで 1 つの UILabel しか扱っていません。通常の UILabel。

PS このコードは、 Quartz 2D ドキュメントから大量に借用しました

于 2009-10-08T10:59:01.520 に答える
18

ここでは、テキスト シャドウのサポートが組み込まれているとは思いませんUILabel

2 つのアイデア:

(1) [コード化するのはややトリッキー。]UITextField非常に小さなオフセット (おそらく (0.2,0.8)? ) で、オリジナルの後ろに1 秒追加します。プロトコルtextField:shouldChangeCharactersInRange:replacementString:でメソッドを実装することにより、すべてのテキストの変更をキーごとにリッスンできます。UITextFieldDelegateそれを利用して、下のテキストを同時に更新することができます。また、下のテキスト (影のテキスト) を灰色にすることもできます。また、部分的にオフセットされたテキスト四角形がぼやけて見えるという事実を利用して、わずかにぼやけたものにすることもできます。追加:そうそう、[UIColor clearColor]このアイデアを採用する場合は、上部のテキスト フィールドの背景色を に設定することを忘れないでください。

(2) 【コーディングがさらに楽しくなる】メソッドをサブクラス化UITextFieldし、オーバーライドするdrawRect:。これまでにこれを行ったことがないので、これが指定された描画方法であることに依存していることを前もって述べておきdrawTextInRect:ますUITextField次に、CGContextSetShadow関数を介して影を描画する描画コンテキストを設定し、を呼び出します[super drawRect:rect];。うまくいけばうまくいく - 元のUITextFieldコードが描画コンテキストのシャドウパラメータをクリアする場合、その考えは失敗し、描画コード全体を自分で書かなければならないUITextFields. -and-pasteと日本語での漢字入力。

于 2009-08-13T20:20:16.263 に答える
17

意志に直接影を適用する方法はUITextView機能しますが、これは間違った方法です。明確な背景色で影を直接追加することにより、すべてのサブビューに影が表示されます。カーソルも同様です。

使用すべきアプローチは withNSAttributedStringです。

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 用です。下位バージョンをサポートする必要がある場合は、次のアプローチを使用できます。(追加することを忘れないでください#import <QuartzCore/QuartzCore.h>)

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:51:35.670 に答える