2

オーバーライドされたUIViewサブクラスがあります。drawRect描画コードはビューの全領域を埋めません。その一部は透明であることを意図しています。しかし、画面上に描画すると、透明であるべきものは黒になります。 適切に透明にするにはどうすればよいですか?

を に設定するbackgroundColor[UIColor clearColor]、ビュー全体が消えます。他の色に設定すると、黒い領域がその色に変わります。に設定opaqueNOても同じ効果があります。以下のように、最初に透明な長方形を描くとdrawRect:

[[UIColor clearColor] setFill];
UIRectFill( rect );

……また黒くなる。上記のコードで別の色を使用すると、その色が描画されます。使用する色を部分的に透明にすると、黒が透けて見えます。

更新:ビューに透明度のグラデーションがあることが関連している可能性があります。UIView境界内に青い四角形を描画し、それ以外はすべて透明のままにする、非常に単純なサブクラスでテストしてみました。そのビューを期待どおりにレンダリングするように設定しますopaque=NO

4

2 に答える 2

4

ビューはおよびにopaque設定する必要があります。また、間違ったブレンド モードが使用されていました。我々は持っていた:NObackgroundColor[UIColor clearColor]

CGContextSetBlendMode(context, kCGBlendModeSourceAtop);

必要なもの:

CGContextSetBlendMode(context, kCGBlendModeDestinationOver);

描画コードは、コードを出力できるグラフィックス ツールによって生成されたものであり、サポート部門は、off-by-one エラーのために間違ったブレンド定数が生成されていることを突き止めました。

于 2013-04-30T16:26:56.167 に答える
0

このコード行を使用して、ビューを初期化してみてください。

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self setOpaque:NO];
        [self.layer setOpaque:NO];
    }
    return self;
}

alpha プロパティを設定して透明効果を作ることができます

self.alpha=0.3f;
于 2013-04-29T20:36:41.657 に答える