4

UIControlサブクラスがあります。次のコードを使用して、背景色を変更します。

- (void)drawRect:(CGRect)rect
{
    [self.backgroundColor setFill];
    UIRectFill([self bounds]);
}

これは、を除くすべての色で正常に機能します[UIColor clearColor]。どうすれば背景をUIControl透明にすることができますか?

4

3 に答える 3

5

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の初期化)に設定されているためです。色付きの背景を設定すると、黒い背景の上に表示されます。クリアなものを設定すると、デフォルトの黒い背景が表示されます。

于 2013-01-11T15:54:32.600 に答える
3

UIControlサブクラスであるaの場合UIView

self.backgroundColor = [UIColor <anycolor>]; 

@ niko34で説明されているように、コントロールに透明な色、つまり[UIColor clearColor]、任意の種類の透明性を持つ他の色を設定する必要がある場合は、十分なはずです。

self.opaque = NO;

そうしないと、透明な色が不透明に描画されます

于 2013-01-11T16:17:56.050 に答える
0

アルファを0.5以下に設定してみてください。半透明の背景に、次のような黒い色合いが表示されるはずです。[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]

于 2014-09-11T12:35:55.247 に答える