web-dev-qa-db-ja.com

UITextView背景画像

背景画像をUITextViewに設定するにはどうすればよいですか?

37

背景画像とUIImageViewを兄弟として含むUITextViewを作成し、Interface Builderでテキストビューを移動して画像ビューを重ねます(または、両方を同じ親ビューに追加します)プログラム的に)。また、テキストビューが不透明でないことを確認し、%不透明度の背景にする必要があります。

72
duncanwilcox
UITextView *textView = [[UITextView alloc]initWithFrame: window.frame];
textView.text = @"text\n text\n text";
UIImageView *imgView = [[UIImageView alloc]initWithFrame: textView.frame];
imgView.image = [UIImage imageNamed: @"myImage.jpg"];
[textView addSubview: imgView];
[textView sendSubviewToBack: imgView];
[window addSubview: textView];
45
oxigen

@ durai:画像に高さ制限があり、下にスクロールした後に空の背景が表示された場合、同じ画像を繰り返すことができます。

これは役に立つかもしれません:

textView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed: @"Image.png"]];
41
Zaraki

説明が1つだけあります。@ oxigenから回答#9を試してみると、次の行がわかりました。

UIImageView *imgView = [[UIImageView alloc]initWithFrame: textView.frame];

textView.frameを基準にしています。したがって、xyの値は、完全にオーバーラップさせたい場合は0,0にする必要があります。つまり、次のようなものが必要です。

UIImageView *imgView = [[UIImageView alloc]initWithFrame:textView.bounds];
11
Gustavo

背景画像を設定する簡単な方法を見つけました。

hファイル

@interface FNTextView : UITextView

@end

mファイル

...
- (void)drawRect:(CGRect)rect
{
    [self.bgImage drawInRect:rect];

    [super drawRect:rect];
}

- (void)initHandler
{
    self.bgImage = [[UIImage imageNamed:@"textview_bg"] resizableImageWithCapInsets:UIEdgeInsetsMake(4, 4, 4, 4)];
}
...
[txtView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"image.png"]]];
5
Mosib Asad

タイル張りの背景の場合、私はこのソリューションが好きです

UIImage *patternImage = [UIImage imageNamed:@"image.png"];
UIColor* color = [UIColor colorWithPatternImage:patternImage];
textView.backgroundColor = color;
2
Remizorrr
UITextView *textView=[[UITextView alloc]initWithFrame: CGRectMake(20, 20, 40, 40)];
textView.text = @"this is a test \n this is test \n this is a test";
UIImageView *img = [[UIImageView alloc]initWithFrame: textView.frame];
img.image = [UIImage imageNamed: @"image.png"];
[self.view addSubview:textView];
[self.view insertSubview:img belowSubview:textView];
1

@dulcanwilcoxと@oxigenの答えはどちらも機能しますが、画像が何らかの境界線を示すために使用されている場合に備えて、背景画像のサイズを変更できるようにすることもできます。

UITextView *textView = [[UITextView alloc]initWithFrame: window.frame];
textView.text = @"Some text...";

UIImageView *imgView = [[UIImageView alloc]initWithFrame: textView.frame];
imgView.image = [[UIImage imageNamed: @"image"] resizableImageWithCapInsets:UIEdgeInsetsMake(8, 8, 8, 8)];

[textView addSubview:imgView];
[textView sendSubviewToBack:imgView];

[window addSubview:textView];

resizableImageWithCapInsets:(UIEdgeInsets)capInsets のドキュメントを確認してください。

1
Mateus

よくわかりませんが、背景画像がUIImageViewによって処理されると仮定して、次のことを試すことができます。

[myTextView addSubview:myImageView];

UITextViewのalpha/opaqueプロパティの値を変更する必要がある場合があることに注意してください。

敬具。

1
Massimo Cafaro