【问题标题】:Darkening a UIView使 UIView 变暗
【发布时间】:2010-04-16 01:07:42
【问题描述】:

我想将 UIView “变暗”一定量。现在,我正在做这样的变暗:

UIView *overlay = [[UIView alloc] initWithFrame:mainView.bounds];
overlay.backgroundColor = [UIColor blackColor];
overlay.alpha = 0.5f;
[mainView addSubview:overlay];

不幸的是,这也为mainView 的透明部分添加了半透明的黑色覆盖。有什么办法只使不透明的部分变暗吗?

【问题讨论】:

    标签: iphone cocoa-touch uiview calayer


    【解决方案1】:

    这里有一些东西可以尝试。我从未使用过 UIRectFillUsingBlendMode。

    -(void) drawRect:(CGRect)inDirty {
      [[UIColor colorWithWhite:0.0 alpha:0.5] setFill];
      UIRectFillUsingBlendMode( inDirty , kCGBlendModeDarken );
    }
    

    实现这一点的视图必须设置为仅与您想要影响的其他视图复合。这可能意味着一个父视图包含此视图以及您想要变暗的所有其他视图。

    您还可以查看 CGContextSetBlendMode。

    【讨论】:

    • 这看起来很有希望!不过,我不确定您对与其他视图进行合成是什么意思(我是 UIView 菜鸟)。在我的示例中,我可以在 mainView 中覆盖 drawRect: 吗?
    • 混合模式变暗将使已在同一上下文中绘制的其他所有内容变暗。这意味着您想要变暗的任何视图都必须已经绘制到您将要绘制的相同上下文中。 drawRect: 中当前上下文的控制取决于系统,我不确定它是如何工作的。如果它为每个视图创建一个全新的上下文,那么这段代码可能什么都不做。如果这不起作用,您可以将视图渲染为变暗为图像,然后像上面一样绘制图像并使其变暗。
    【解决方案2】:

    尝试使用类似的东西(显然是调整颜色)?

    overlay.backgroundColor = [UIColor colorWithRed:0.317647 green:0.317647 blue:0.317647 alpha:0.85];

    【讨论】:

    • 你不会把背景颜色设置为 (0, 0, 0, 0.85) 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多