3

できれば追加のビューを使用せずに、ビューが無効/強調表示されているかのようにビューを暗くするにはどうすればよいですか?

UIViewビューとは、すべての子を持つを意味します。無効/強調表示と同じ効​​果を実現したいUIButton

ビューが完全に不透明であると想定しないでください。

4

3 に答える 3

8

私が現在遊んでいるもの:

  1. 不透明度のある黒いレイヤーを作成します(_highlightLayer)。これは、「アルファ付きのブラック ビュー」アプローチに似ています。
  2. _highlightLayer元のビューの不透明でないイメージでマスクします。
  3. _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;
}

もちろん、これは小さなビューにのみ使用する必要があります。

于 2013-03-20T16:05:54.767 に答える
0

例:

UIButton *button1 と UIView *view1 があります

次の方法でボタンとビューを無効にできます。

[view1 setHidden:YES];
[button1 setEnabled:NO];

ボタンとビューを有効にする方法は次のとおりです。

[view1 setHidden:NO];
[button1 setEnabled:YES];

お役に立てれば..

于 2013-03-17T17:01:28.630 に答える
0

このアプローチは、追加のビューを使用しないというあなたの好みを満たすことができませんが、アルファが 0.6 程度の黒いビューを追加するだけで効果が得られるようです。この新しいビューを使用して UIEvents をインターセプトできるという追加の利点がありますまとめて事実上無効になっています。

オーバーレイ ビューに黒の背景を使用するだけでなく、背景を放射状のグラデーションで塗りつぶして、ポップアップ ビューがその背後のビューを無効にしたときに iOS で発生するスポットライト効果のようなものを実現することもできます。 .

于 2013-03-17T19:24:29.587 に答える