【问题标题】:How Do I dim/disable the current view?如何调暗/禁用当前视图?
【发布时间】:2013-11-12 10:03:27
【问题描述】:

是否可以在 cocoa 中调暗当前视图?在某个操作上,我想让屏幕变暗一点并阻止用户与屏幕交互。

【问题讨论】:

  • 请明确范围;是视图还是屏幕?
  • 整个应用程序窗口
  • 所以也没有。你需要更精确。
  • 用户可见的当前视图
  • @trojanfoe 我必须调暗图像(使其非常暗/黑色)并禁用屏幕上的所有控件

标签: objective-c macos cocoa nsview


【解决方案1】:

根据@Lord Zsolt 给出的想法,同样可以在OS X 中实现为:

当您想使窗口变暗时添加以下代码。

NSView *transparentBlackView = [[NSView alloc] initWithFrame:[[yourwindow contentView] frame]];

CALayer *viewLayer = [CALayer layer];
[viewLayer setBackgroundColor:CGColorCreateGenericRGB(0.0, 0.0, 0.0, 0.4)]; //RGB plus Alpha Channel
[transparentBlackView setWantsLayer:YES]; 
[transparentBlackView setLayer:viewLayer];

[[yourwindow contentView] addSubview:transparentBlackView];

别忘了将QuartzCore.framework 添加到您的项目中。并使用 #import<QuartzCore/QuartzCore.h>

将其导入您的班级

【讨论】:

    【解决方案2】:

    编辑:我现在才注意到,它是 OSX,而​​不是 iOS。虽然想法应该还是一样的。

    禁用用户交互:

    [self.view setUserIntractionEnabled:NO];
    

    然后在上面添加一个黑色的 UIView,alpha 像 0.2。

    UIView *transparentBlackView = [[UIView alloc] initWithFrame:self.view.frame]
    [transparentBlackView setBackgroundColor:[UIColor blackColor];
    [transparentBlackView setAlpha:0.2];
    [self.view addSubview:transparentBlackView];
    

    然后你可以编写一个自定义方法,并使用 performSelector:afterDelay 来移除 transparentBlackView。

    【讨论】:

    • 是的,除了缺少关键方法setUserIntractionEnabled...
    • 是的,我说过它们不能在 OSX 中工作,但可能每个都有一个 OSX 对应项。
    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2011-12-14
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多