使视图变暗,如同禁用
如何将视图变暗为禁用/突出显示,最好是不使用任何其他视图?
我认为我的意思是一个UIView
和所有的孩子。 我想实现一个禁用/突出显示的UIButton
相同的效果。
不要以为视图完全不透明。
我现在在玩什么:
- 创build一个不透明的黑色图层(
_highlightLayer
)。 这与“黑色视图alpha”方法类似。 -
_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; }
当然,这只能用于小视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视图禁用它后面的视图时发生的那种聚光效果。 。