【问题标题】:How To Make Part of Web View Slightly Translucent?如何让网页视图的一部分稍微半透明?
【发布时间】:2016-04-02 23:06:13
【问题描述】:

Objective-CMac OSX Cocoa 中,有什么方法可以使WebView 上的DIV 稍微半透明,以便窗口后面的桌面应用程序略微渗出,但仅限于@987654326 @ 而不是 WebView 的其余部分?

或者也许我可以使整个 WebView 半透明,但对所有 DIVs 关闭它,除了一个 DIV

我有一个WebView 正在加载一个网页。在网页中,我在左侧有一个侧边栏,然后在右侧有一个IFRAME。我单击侧边栏上的项目,它们会更改右侧的 IFRAME 页面。我想让这个侧边栏稍微半透明。

到目前为止,在我的AppDelegate.m 中,我的HTMLBODY 标签设置为background:none,我的侧边栏设置为background:rgba(0,0,0,0.5),但我最终看到的只是一个灰色侧边栏背景。这就像 webview 本身想要确保它的背景设置为透明以外的颜色。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
  // note that _window and _wv are outlet properties to my window and webview widgets
  [_window setBackgroundColor:[NSColor clearColor]];
  [_window setOpaque:NO];

  [_wv.layer setBackgroundColor:[NSColor clearColor].CGColor];
  [_wv.layer setOpaque:NO];
}

【问题讨论】:

    标签: objective-c macos cocoa webview alpha-transparency


    【解决方案1】:

    相关的分步教程和示例:

    http://stylekit.org/blog/2016/01/23/Chromeless-window/

    设置半透明:

    1. 将您的 NSWindow 子类的 styleMask 设置为 NSFullSizeContentViewWindowMask(这样半透明也将在标题栏区域可见,将其省略,标题栏区域将为空白)
    2. 设置self.titlebarAppearsTransparent = true(隐藏标题栏默认图形)
    3. 将下面的代码添加到您的 NSWindow 子类中:(您现在应该有一个半透明窗口)

    .

    let visualEffectView = NSVisualEffectView(frame: NSMakeRect(0, 0, 0, 0))//<---the width and height is set to 0, as this doesn't matter. 
    visualEffectView.material = NSVisualEffectMaterial.AppearanceBased//Dark,MediumLight,PopOver,UltraDark,AppearanceBased,Titlebar,Menu
    visualEffectView.blendingMode = NSVisualEffectBlendingMode.BehindWindow//I think if you set this to WithinWindow you get the effect safari has in its TitleBar. It should have an Opaque background behind it or else it will not work well
    visualEffectView.state = NSVisualEffectState.Active//FollowsWindowActiveState,Inactive
    self.contentView = visualEffectView/*you can also add the visualEffectView to the contentview, just add some width and height to the visualEffectView, you also need to flip the view if you like to work from TopLeft, do this through subclassing*/
    

    【讨论】:

    • 问题。这个还没试过。当您移动或最小化窗口,然后再次打开它时会发生什么?是保持半透明,还是要重新应用效果?
    • 顺便说一句,此效果需要优胜美地或更高版本。
    • 哦,您已经在一个带有 Objective C 标记的问题上发布了 Swift 代码,但转换起来并不难。
    • 这两种语言在某种程度上是相互交织的。我不确定是否有在 obj-c 问题中不发布快速答案的惯例。随着 OSX 的发展,我认为这种情况会经常发生。
    • 您可以在半透明后移动、最小化甚至添加视频。 OSX 在其显卡上的核心图形引擎中呈现这一点。所以一切都会顺利并且对cpu友好。我所指的文章将随着时间的推移而更新以添加此类示例。
    【解决方案2】:

    是的,只需将您的WebView 实例的drawsBackground 属性设置为NO,然后确保使用CSS 填充您希望不透明的页面部分。

    【讨论】:

    • 是的,那是缺少的部分:_wv.drawsBackground = NO; 然后在我的 CSS 上,我在 #sidebar 上使用了rgba(0,0,0,0.5);,并确保我的 HTMLBODY 标签设置为background:transparent;。然后我给其余的部分上色。她工作!谢谢。
    • 好的,这样就实现了透明度。现在,如果您必须支持 OSX Cocoa 10.8 及更高版本,并且知道 Apple 的“活力”过滤器 API 直到 Yosemite 才出现,您将如何伪造像 what is shown here 这样的光漫射不透明度?请注意,选择的答案不适用于优胜美地。在 Yosemite 之前给出的示例只创建了一个白色模糊球,与 NSVisualEffectView 实现的 Yosemite 活力效果不完全相同。
    • 这和原来的问题没什么关系,建议你开一个新的。
    • 事实证明这是不可能的。但是,可以为 10.8 及更高版本提供一种启用它的方法(不会因缺少依赖项而破坏编译过程),但只有在 10.10 及更高版本时才激活该功能。 Here's how.
    猜你喜欢
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 2019-09-21
    • 2011-01-22
    相关资源
    最近更新 更多