使视图变暗,如同禁用

如何将视图变暗为禁用/突出显示,最好是不使用任何其他视图?

我认为我的意思是一个UIView和所有的孩子。 我想实现一个禁用/突出显示的UIButton相同的效果。

不要以为视图完全不透明。

我现在在玩什么:

  1. 创build一个不透明的黑色图层( _highlightLayer )。 这与“黑色视图alpha”方法类似。
  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; } 

当然,这只能用于小视angular。

例:

你有一个UIButton * button1和UIView * view1

您可以通过这种方式禁用button和视图:

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

启用一个button和一个视图可以这样做:

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

希望这可以帮助..

虽然这种方法无法满足您不使用额外视图的偏好,但简单地添加一个0.6左右的alpha视图似乎可以达到这个效果,还有一个额外的好处,就是您可以使用这个新的视图来截取UIEvents,这样所有的子视图有效地被禁用。

你甚至可以用graphics来performance幻想,而不是仅仅使用黑色背景来覆盖视图,你可以用径向渐变填充它的背景,以实现当iOSpopup视图禁用它后面的视图时发生的那种聚光效果。 。