我目前正在尝试创建一个类似于Volume OS X窗口的窗口:

为了做到这一点,我有自己的NSWindow(使用自定义子类),透明/无标题栏/无阴影,NSVisualEffectView在其contentView内部.这是我的子类的代码,使内容视图轮流:
- (void)setContentView:(NSView *)aView {
   aView.wantsLayer            = YES;
   aView.layer.frame           = aView.frame;
   aView.layer.cornerRadius    = 14.0;
   aView.layer.masksToBounds   = YES;
   [super setContentView:aView];
}
这就是结果(正如你所看到的,角落是颗粒状的,OS X更平滑):
 
关于如何使角落更平滑的任何想法?谢谢
即将推出的OSX 10.10("Yosemite")提供了一种新型视图NSVisualEffectView,它支持窗口内或窗口内的半透明效果.我对窗口的半透明感兴趣,所以我将在这个问题中专注于这一点,但它也适用于窗口内的半透明度.
在10.10中使用窗口半透明是微不足道的.您只需NSVisualEffectView在视图层次结构中放置一个位置并将其设置blendingMode为NSVisualEffectBlendingModeBehindWindow.这就是全部.
在10.10下你可以NSVisualEffectView在IB中定义s,设置它们的混合模式属性,然后你就可以开始运行了.
但是,如果您希望向后兼容早期的OSX版本,则无法执行此操作.如果您尝试NSVisualEffectView在XIB中包含一个,则在尝试加载XIB时会立即崩溃.
我想要一个"设置并忘记它"的解决方案,它将在10.10下运行时提供半透明效果,并且在早期操作系统版本上运行时简单地降级为不透明视图.
到目前为止我所做的是在XIB中使有问题的视图成为普通的NSView,然后添加检查的代码(由awakeFromNib调用),[NSVisualEffectView class] != nil当它被定义时,我创建了一个NSVisualEffectView的实例,将我当前视图的所有子视图移动到新视图,并将其安装到位.这是有效的,但它是我每次想要半透明视图时必须编写的自定义代码.
我想这可能是使用NSProxy对象.这就是我的想法:
定义NSView的自定义子类(让我们称之为MyTranslucentView).在所有的init方法(initWithFrame和initWithCoder)中,我会抛弃新创建的对象,而是创建一个具有私有实例变量(myActualView)的NSProxy子类.在初始时间,将决定以创建myActualView对象作为NSVisualEffectView如果OS> = 10.10,和OS下一个正常的NSView <10.10.
代理会将所有消息转发给myActualView.
这将是相当多的繁琐,低级代码,但我认为它应该工作.
有没有人做过这样的事情?如果是这样,你能指出我正确的方向还是给我任何指示?
苹果是MUCH更加开放与约塞米蒂一个测试版协议比以前的Beta版本.通过谈论这一点,我不认为我违反了我的Beta NDA,但实际使用的代码NSVisualEffectView可能需要在NDA下共享...
在OS X 10.10源列表中似乎使用了光亮的外观.在Finder(以及其他一些第三方应用程序,例如Things.app)中,源列表中的所选项目由暗色振动外观指示.例如,请参见下图中的"桌面"行.
我该如何复制这种行为?我是否需要使用委托方法来指定表行视图,
-outlineView:rowViewForItem:
并尝试自己定制绘图或是否有更直接的方法?如果您在Xcode标准源列表界面默认的高亮是保持我们在以前版本的OS X已经看到了标准的蓝色矩形

我知道当使用核心动画层(CALayer)时,你必须在NSTextField后面有一个坚实的背景色,因为不支持子像素,但是我需要使用NSVisualEffectView后面的我NSOutlineView,我在顶部使用几个NSTextFields.如果我设置wantsLayer为YES NSOutlineView,遗憾的是顶部的文字变得很混乱.如何在顶部获得漂亮的模糊和流畅的文字?这是否意味着我们CALayer在使用NSVisualEffectView超级视图时根本无法使用?
我想知道是否有可能控制Yosemite最近引入的所谓的活力效果中的半透明度,这可以通过使用NSVisualEffectView该类在Objective-C应用程序中实现.
这是一个更具体的例子.考虑Yosemite OS X在音量改变时显示的半透明效果:

通过使用简单的方式获得的活力强得多NSVisualEffectView(如下图所示)

如果我们比较两个图像 - 请忽略扬声器的不同形式但是关注背景 - 我们看到Yosemite OS X音量窗口中的活力量(高斯模糊效果的强度)要强得多,而不是我的应用使用NSVisualEffectView.怎么能得到那个?
我想使用NSVisualEffectView黑暗的活力,但我觉得在某些情况下效果太苍白,所以我想让背景变暗.
这是一个示例应用程序,使用NSBox视图提供更暗的背景.

我们可以看到NSBox"主要"外观设法覆盖背景,按钮快乐地位于其上方.但是,在NSBox自定义外观上,按钮似乎通过背景"剪切"到下面的视觉效果视图.
我已经尝试了子类化NSVisualEffectView和覆盖-drawRect:,用不同的颜色填充它,结果是一样的.
有没有办法在其他视图上叠加充满活力的控件?
我试图让我的NSScrollView(并因此包含NSOutlineView)使用模糊NSVisualEffectView的幕后混合效果.
我已成功制作NSVisualEffectView容器视图并将滚动视图作为子视图放置.这似乎工作正常(只要我使我的所有表格单元格,表格,nsscrollview等透明).
然而,我现在已经在"辅助功能"选项下改变了"降低透明度",突然之间,我的背后有一个黑色背景NSScrollView.我试图对视觉效果视图进行子类化以覆盖drawRect方法,以便我可以绘制自己的背景,但我刚刚学会了这是不可能的或推荐的.
如何检测"减少透明度"是否为"开启"以及如何动态地使滚动视图不透明?
objective-c nsoutlineview nsview osx-yosemite nsvisualeffectview
我有一个NSVisualEffectView一个内NSPopover用于开发10.10.
当子类化NSVisualEffectView以具有悬停背景颜色效果时,无边框按钮颜色似乎不同

我尝试设置backgroundColor纽扣电池以clearColor或为我所用的相同drawRect:的的NSVisualEffectView,前者给出错误的颜色(未填充蓝色)和后来还是用错了颜色相同.(边框周围的灰色框).
CALayer 可以解决这个问题,但有没有办法不使用它?
有任何想法吗?
我有一个NSVisualEffect作为我的mac应用程序的背景.我希望视觉效果视图能够模糊任何结束,但充满活力的黑暗看起来就像是黑色视图.如何减少模糊半径,以便更清晰地看到背景.如果这不可能是NSVisualEffect,那我该怎么做呢?谢谢.
我有一个带有活力的NSVisualEffectView,包含文本字段(NSTextField或NSComboBox)和无边框按钮.按钮位于文本字段上方,我想禁用无边框按钮上的活力效果,因为它们应该出现在文本字段的白色背景上.
根据NSVisualEffectView类引用中的建议,我尝试做的是将我的NSButton包装在另一个NSVisualEffectView中,并将其状态设置为Inactive.这样做是用浅灰色背景取代"充满活力"的背景.
下图说明了这一点.第一个字段是我尝试的解决方案,第二个字段显示无边框按钮的默认行为,作为NSVisualEffectView的子节点.
我还尝试了子类化NSButton并将其单元格背景颜色设置为白色或透明但我总是得到灰色背景.
如何将浅灰色背景更改为白色或透明背景?谢谢
cocoa ×7
macos ×5
objective-c ×5
osx-yosemite ×4
nsview ×3
nsbutton ×2
appkit ×1
nstextfield ×1
nswindow ×1
swift ×1