UIControl
サブクラスがあります。次のコードを使用して、背景色を変更します。
- (void)drawRect:(CGRect)rect
{
[self.backgroundColor setFill];
UIRectFill([self bounds]);
}
これは、を除くすべての色で正常に機能します[UIColor clearColor]
。どうすれば背景をUIControl
透明にすることができますか?
initWithFrameまたは/およびinitWithCoderで明確な背景色を設定する必要があります
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.backgroundColor = [UIColor clearColor];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self)
{
self.backgroundColor = [UIColor clearColor];
}
return self;
}
コントロールのデフォルトの背景は透明になり、必要に応じてdrawRectに任意の背景色を塗りつぶすことができます。
この例で機能しない理由は、コントロールのデフォルトの背景が黒で、drawRectの外側(おそらく親UIViewの初期化)に設定されているためです。色付きの背景を設定すると、黒い背景の上に表示されます。クリアなものを設定すると、デフォルトの黒い背景が表示されます。
のUIControl
サブクラスであるaの場合UIView
self.backgroundColor = [UIColor <anycolor>];
@ niko34で説明されているように、コントロールに透明な色、つまり[UIColor clearColor]
、任意の種類の透明性を持つ他の色を設定する必要がある場合は、十分なはずです。
self.opaque = NO;
そうしないと、透明な色が不透明に描画されます
アルファを0.5以下に設定してみてください。半透明の背景に、次のような黒い色合いが表示されるはずです。[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]