3

この次のコードでQuartzCorefor myを使用してシャドウを作成しました。UITextView

myTextView.layer.masksToBounds = NO;
myTextView.layer.shadowColor = [UIColor blackColor].CGColor;
myTextView.layer.shadowOpacity = 0.7f;
myTextView.layer.shadowOffset = CGSizeMake(2.0f, 2.0f);
myTextView.layer.shadowRadius = 8.0f;
myTextView.layer.shouldRasterize = YES;

上記のコードの出力は次のとおりですshadowlooks good too.

ここに画像の説明を入力

しかし、にテキストを追加しようとするとmyTextView、textView テキストが範囲外になり、myTextView以下のように見えなくなります。

ここに画像の説明を入力

shadow を追加したときにのみ発生しています。シャドウを追加しないと、テキストがtextView変に表示されません。何が間違っていますか?? どうすればこれを克服できますか?なぜそれが起こっているのですか?

アップデート:

@borrrdenmaskToBounds = NO;私たちが設定した場合YES、影を取得できないため、それが起こっていることがわかりました。理由 ここに答えがあります

4

3 に答える 3

7

UIView の動作のため、「正しい」解決策はありません。maskToBounds が NO の場合、レイヤーの境界の外側にあるサブレイヤーはすべて表示されます。また、UITextField は、UITextField レイヤーの外側でテキストをスクロールします。

UITextView の背後にクリア ビューを追加し、その上に影をドロップします。

于 2012-11-22T06:17:26.060 に答える
2

textView の下に別の UIView を追加し、そのレイヤーに影を表示するように設定するだけです (背景色をクリア カラー以外に設定することを忘れないでください。そうしないと、影が描画されません)。

myTextView = [UITextView alloc] initWithFrame:CGRectMake(100,100,200,200);
UIView* shadowView = [UIView alloc] initWithFrame:myTextView.frame];
shadowView.backgroundColor = myTextView.backgroundColor;
shadowView.layer.masksToBounds = NO;
shadowView.layer.shadowColor = [UIColor blackColor].CGColor;
shadowView.layer.shadowOpacity = 0.7f;
shadowView.layer.shadowOffset = CGSizeMake(2.0f, 2.0f);
shadowView.layer.shadowRadius = 8.0f;
shadowView.layer.shouldRasterize = YES;
[someView addSubview:shadowView];
[someView addSubView:myTextView];
于 2012-11-22T06:26:20.880 に答える