40

iOS で任意の UIView を指定した場合、Core Graphics (CAGradientLayer が思い浮かびます) を使用して「前景透明」グラデーションを適用する方法はありますか?

背景が UIColor よりも複雑なため、標準の CAGradientLayer は使用できません。また、サブビューが親の垂直スクロールビューに沿ってスクロールされると背景が変化するため、PNG をオーバーレイすることもできません (画像を参照)。

エレガントではないフォールバックがあります。親スクロールビューがスクロールされると、uiview でサブビューをクリップし、事前にレンダリングされた背景のグラデーション png を移動します。

透明な uiview グラデーションの問題

4

5 に答える 5

98

これは非常に簡単な修正でした。CAGradientLayer をサブビューのマスクとして適用します。

CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = _fileTypeScrollView.bounds;
gradientLayer.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
gradientLayer.startPoint = CGPointMake(0.8f, 1.0f);
gradientLayer.endPoint = CGPointMake(1.0f, 1.0f);
_fileTypeScrollView.layer.mask = gradientLayer;

正しい方向に向けてくれたCocoaneticsに感謝します!

于 2012-06-01T18:17:58.830 に答える
2

グラデーションの例

私はちょうど同じ問題に遭遇し、自分のクラスを書くことになりました。やり過ぎのように思えますが、透明度のあるグラデーションを作成する方法はこれしかありませんでした。ここで私の記事とコード例を見ることができます

基本的には、2 つの画像を作成するカスタム UIView になります。1 つは単色で、もう 1 つはイメージ マスクとして使用されるグラデーションです。そこから、結果の画像を uiview.layer.content に適用しました。

お役に立てば幸いです、ジョー

于 2012-10-20T07:16:07.593 に答える
0

言いたくないのですが、あなたは CUSTOM UIView ランドにいると思います。drawRect ルーチンをオーバーライドするカスタム UIView でこれを実装しようと思います。

これにより、そのビューを実際のスクロールビューの上に配置し、グラデーションビューを (必要に応じて) すべてのタッチイベントを「渡す」ことができます (つまり、ファーストレスポンダーを放棄します)。

于 2012-06-01T16:00:54.940 に答える