使视图变暗,就好像已禁用

时间:2013-03-17 16:32:20

标签: ios uiview uibutton

如何使视图变暗,就像它被禁用/突出显示一样,最好不使用任何其他视图?

我认为我的意思是UIView及其所有孩子。我希望达到与禁用/突出显示UIButton相同的效果。

不要认为视图是完全不透明的。

3 个答案:

答案 0 :(得分:8)

我目前正在玩的是:

  1. 使用不透明度(_highlightLayer)创建黑色图层。这与带有alpha"的"黑色视图类似。方法
  2. 使用原始视图的非不透明图像遮罩_highlightLayer
  3. _highlightLayer添加到视图图层。
  4. 只有视图的非透明像素会变暗。

    代码:

    - (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;
    }
    

    当然,这只应用于小视图。

答案 1 :(得分:0)

示例:

你有一个UIButton * button1和UIView * view1

您可以通过以下方式禁用按钮和视图:

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

启用按钮和视图可以这样做:

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

希望这会有所帮助..

答案 2 :(得分:0)

虽然这种方法无法满足您不使用其他视图的偏好,但只需添加alpha为0.6左右的黑色视图就可以达到效果,还有一个额外的好处就是您可以使用此新视图拦截UIEvents,以便所有子视图都被有效地禁用。

您甚至可以获得图形化的幻想,而不是仅使用黑色背景作为叠加视图,您可以使用径向渐变填充其背景,以实现当弹出视图禁用后面的视图时在iOS中发生的那种聚光效果它...