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