8

UIViewの背景としてグラデーションを使用したいと思います。私はこれが通常画像とbackgroundColorプロパティで行われることを知っています。ただし、これをコードで行う方法を学びたいと思います。https://stackoverflow.com/a/1931498/99683を使用して、プログラムで作成しUIView、グラデーションレイヤーを付けることができます。これはうまくいきます。

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 340, 280, 100)];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor yellowColor] CGColor], nil];
[view.layer insertSublayer:gradient atIndex:0];
[self.view addSubview:view];

ただし、ビューをInterface Builder(背景をクリアに設定)に配置して同じことを試してみると、グラデーションが表示されません。

CAGradientLayer *gradient2 = [CAGradientLayer layer];
gradient2.frame = self.containerView.bounds;
gradient2.colors = [NSArray arrayWithObjects:(id)[[UIColor blueColor] CGColor], (id)[[UIColor greenColor] CGColor], nil];
[self.containerView.layer insertSublayer:gradient2 atIndex:0];

これを機能させるために、IBまたはコードで他に何かする必要がありますか?

4

2 に答える 2

3

私は同じ問題に直面しましたが、最終的に、背景のグラデーションを設定しようとしているコードのポイントでUIViewが作成されていないことがわかりました。これは、次のいずれかである可能性があります-viewDidLoadまたは--viewWillAppearそのため

self.containerView.boundsは{{0、0}、{0、0}}になります

代わりに、グラデーションレイヤーを内側に設定する必要があります

viewDidAppear

その時点でビューが作成されています。

于 2013-08-01T16:09:28.397 に答える
1

このライブラリは、IB_DESIGNABLE/IBInspectableを使用してストーリーボードでグラデーションの背景を設定することをサポートしています。

本当に便利です。

https://github.com/recruit-mtl/EXTView/

于 2016-03-08T06:28:49.217 に答える