0

UI 要素のグラデーション背景を作成するために使用UIGraphicsGetCurrentContext()していますが、描画が行われている場所を誤解していたと思います。サブビューで描画したかったのですが、代わりにビュー自体で行われています。

UIGraphicsGetCurrentContext()問題は、 を使用するとビューが取得されるCGContextRefため、そこで描画が行われることだと思います。私がやりたいのは、サブビューで描画を行うことです。これにより、他の関連するサブビューでフェードインおよびフェードアウトできます。これを行うことはできますか、それとも背景レイヤー用に別の UIView サブクラスを作成する必要がありますか?

これが私が使用しているコードの簡略化です。私の目標は、ビューを表示したtopBarまま背景のグラデーションをフェードインおよびフェードアウトできるようにすることです。InterfaceControlsView

@implementation InterfaceControlsView

- (id)initWithFrame:(CGRect)frame
{
    topBar = [[UIView alloc]  initWithFrame:CGRectMake(0.0, 20.0, self.frame.size.width, 45.0)];
/* etc. */
}

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGRect rect = topBar.frame; // topBar is a subview

    CGContextSaveGState(context);
    CGContextAddRect(context, rect);
    CGContextClip(context);
    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
    CGContextRestoreGState(context);
    /* etc. */
}
@end
4

1 に答える 1

2

サブビューのグラデーション背景を作成するには、サブクラスを作成する必要はなく、グラデーション レイヤーを使用します。お役に立てれば

CALayer *layer = _button.layer;
layer.borderWidth = 1.0f;
layer.borderColor = [UIColor lightGrayColor].CGColor;


CAGradientLayer *gLayer = [CAGradientLayer layer];
[gLayer setName:@"gradient"];

gLayer.frame = layer.bounds;

gLayer.colors = [NSArray arrayWithObjects:
                         (id)[UIColor colorWithRed:26.0/255.0 green:94.0/255.0 blue:74.0/255.0 alpha:1.0].CGColor,
                         (id)[UIColor colorWithRed:23.0/255.0 green:59.0/255.0 blue:37.0/255.0 alpha:1.0].CGColor,
                         nil];
[layer addSublayer:gLayer];
于 2012-11-23T11:30:01.670 に答える