できれば追加のビューを使用せずに、ビューが無効/強調表示されているかのようにビューを暗くするにはどうすればよいですか?
UIView
ビューとは、すべての子を持つを意味します。無効/強調表示と同じ効果を実現したいUIButton
。
ビューが完全に不透明であると想定しないでください。
私が現在遊んでいるもの:
_highlightLayer
)。これは、「アルファ付きのブラック ビュー」アプローチに似ています。_highlightLayer
元のビューの不透明でないイメージでマスクします。_highlightLayer
をビューのレイヤーに追加します。ビューの不透明なピクセルのみが暗くなります。
コード:
- (void)highlight
{
// Black layer with opacity
_highlightLayer = [CALayer layer];
_highlightLayer.frame = CGRectMake(0, 0, self.layer.bounds.size.width, self.layer.bounds.size.height);
_highlightLayer.backgroundColor = [UIColor blackColor].CGColor;
_highlightLayer.opacity = 0.5;
// Create an image from the view
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *maskImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Create a mask layer for the black layer
CALayer *maskLayer = [CALayer layer];
maskLayer.contents = (__bridge id) maskImage.CGImage;
maskLayer.frame = _highlightLayer.frame;
_highlightLayer.mask = maskLayer;
[self.layer addSublayer:_highlightLayer];
}
その後:
- (void)unhighlight
{
[_highlightLayer removeFromSuperlayer];
_highlightLayer = nil;
}
もちろん、これは小さなビューにのみ使用する必要があります。
例:
UIButton *button1 と UIView *view1 があります
次の方法でボタンとビューを無効にできます。
[view1 setHidden:YES];
[button1 setEnabled:NO];
ボタンとビューを有効にする方法は次のとおりです。
[view1 setHidden:NO];
[button1 setEnabled:YES];
お役に立てれば..
このアプローチは、追加のビューを使用しないというあなたの好みを満たすことができませんが、アルファが 0.6 程度の黒いビューを追加するだけで効果が得られるようです。この新しいビューを使用して UIEvents をインターセプトできるという追加の利点がありますまとめて事実上無効になっています。
オーバーレイ ビューに黒の背景を使用するだけでなく、背景を放射状のグラデーションで塗りつぶして、ポップアップ ビューがその背後のビューを無効にしたときに iOS で発生するスポットライト効果のようなものを実現することもできます。 .