使视图变暗,就像禁用一样
Posted
技术标签:
【中文标题】使视图变暗,就像禁用一样【英文标题】:Darken view as if disabled 【发布时间】:2013-03-17 16:32:20 【问题描述】:如何使视图变暗,就好像它被禁用/突出显示一样,最好不使用任何其他视图?
我的意思是UIView
,以及它的所有子代。我想达到与禁用/突出显示UIButton
相同的效果。
不要假设视图是完全不透明的。
【问题讨论】:
说真的????这个问题有 11.9k 的声誉???? o.O 还是我把这个问题弄错了? :o @HinataHyuga 11.9k-> 表示你不能提问?他可能擅长另一种语言并且是 ios 新手?你永远不知道... @HinataHyuga 有时我会问一些关于我已经解决的问题的问题,以学习解决问题的新方法。如果没有人回复,我会发布我的解决方案。我不会立即这样做以避免偏见。 @lakesh 我不是 iOS 新手。我只是想对这个问题有不同的看法。 @hpique 学习任何问题的不同方法的好方法。 :) 【参考方案1】:我目前在玩什么:
-
创建一个不透明的黑色层 (
_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;
当然,这应该只用于小视图。
【讨论】:
这实际上正是我想要的。【参考方案2】:例子:
你有一个 UIButton *button1 和 UIView *view1
您可以通过这种方式禁用按钮和视图:
[view1 setHidden:YES];
[button1 setEnabled:NO];
可以通过这种方式启用按钮和视图:
[view1 setHidden:NO];
[button1 setEnabled:YES];
希望这会有所帮助..
【讨论】:
这不是我问的。顺便说一句,您应该使用setEnabled
禁用按钮。我想说setHidden
比setAlpha
更受欢迎(除非你想要一个淡入淡出动画,在这种情况下你需要两者)。【参考方案3】:
虽然这种方法无法满足您不使用额外视图的偏好,但只需添加一个 alpha 为 0.6 左右的黑色视图似乎就可以达到效果,另外还有一个好处是您可以使用这个新视图来拦截 UIEvents,以便所有子视图都被有效地禁用了。
您甚至可以在图形上获得精美的效果,而不仅仅是为覆盖视图使用黑色背景,您可以使用径向渐变填充其背景,以实现当弹出视图禁用后面的视图时在 iOS 中发生的那种聚光灯效果它...
【讨论】:
谢谢。但是这种方法假设 UIView 是完全不透明的,这是一个很大的限制。 编辑了原始问题以澄清。以上是关于使视图变暗,就像禁用一样的主要内容,如果未能解决你的问题,请参考以下文章
如何在不像 Whatsapp 那样遮挡整个屏幕的情况下禁用表格视图?