1

CAGradientLayer角を丸くしたものを作ろうと思っています。.cornerRadius上の2つの角だけ丸くしたいので使えません。また、.mask後でスクリーンショットを撮りたいのですが、マスクにrenderInContext対応していないので使えません。CALayer

どうすればよいですか:

  • A:CALayerマスクを使用せずに、グラデーションと 2 つの角を丸くした を作成します。

また

  • B: と同様のスクリーンショットを撮りUIGraphicsGetImageFromCurrentImageContextますが、マスクを尊重します。
4

1 に答える 1

0

これを行うためのプログラム的なアプローチを見つけました。丸みを帯びたレイヤーを作成し、その上に正方形のレイヤーを描画します。見栄えのするものを得るには、グラデーションの色と位置をいじる必要があります。

注:マスクに関する要件を考慮して、このソリューションが機能するかどうかはわかりません

+ (void)makeGradientButton:(UIButton *)button {
    // Create a rounded layer
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = button.bounds;
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
    gradient.cornerRadius = 8.0f;

    // Now create a square layer that draws over the top
    CAGradientLayer *gradient2 = [CAGradientLayer layer];
    gradient2.frame = CGRectMake(0, 9, button.bounds.size.width, button.bounds.size.height-9);
    gradient2.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor redColor] CGColor], nil];
    gradient2.cornerRadius = 0.0f;

    [gradient setMasksToBounds:YES];
    [button.layer insertSublayer:gradient atIndex:0];
    [button.layer insertSublayer:gradient2 atIndex:1];
    [button setBackgroundColor:[UIColor clearColor]];
}
于 2012-07-27T16:58:06.690 に答える