您如何使视图变暗,就好像它被禁用/突出显示一样,最好不使用任何其他视图?
通过视图,我的意思是 a UIView
,及其所有子级。我想达到与 disabled/highlighted 相同的效果UIButton
。
不要假设视图是完全不透明的。
我目前正在玩的东西:
_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;
}
当然,这应该只用于小视图。
例子:
你有一个 UIButton *button1 和 UIView *view1
您可以通过以下方式禁用按钮和视图:
[view1 setHidden:YES];
[button1 setEnabled:NO];
可以通过以下方式启用按钮和视图:
[view1 setHidden:NO];
[button1 setEnabled:YES];
希望这可以帮助..
虽然这种方法无法满足您不使用额外视图的偏好,但简单地添加一个 alpha 为 0.6 左右的黑色视图似乎可以达到效果,另外还有一个好处是您可以使用这个新视图来拦截 UIEvents 以便所有子视图有效地被集体禁用。
您甚至可以在图形上获得精美的效果,而不仅仅是为覆盖视图使用黑色背景,您可以使用径向渐变填充其背景,以实现当弹出视图禁用其后面的视图时在 iOS 中发生的那种聚光灯效果。 .