如何在 macOS 中将水印添加到屏幕 (NSScreen)
How to add watermark to Screen (NSScreen) in macOS
我正在制作一个应用程序,它将在 Mac 上的实时屏幕上添加水印。我应该选择哪个API?我尝试了 NSScreen,但我没有找到任何可以将视图添加到 NSScreen 的方法。
像MacAppstore.Please中的Sakura之类的应用程序看看,我不知道我应该使用哪个API。
最简单的解决方案是定义一个自定义的、透明的、window。
当您创建 window 时,您指定了特殊的 BorderlessWindowMask
。这将创建一个 window,它是屏幕上没有标题栏、边缘等的简单矩形区域。
然后你设置一堆属性,这样
- window 漂浮在另一个 windows
之上
- 它不响应事件
- 没有影子
- 它的背景是透明的
以此类推
@implementation WatermarkOverlayWindow
- (id)initWithContentRect:(NSRect)contentRect
{
self = [super initWithContentRect:contentRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
if (self!=nil)
{
self.level = NSFloatingWindowLevel;
self.ignoresMouseEvents = YES;
self.releasedWhenClosed = NO;
self.movableByWindowBackground = NO;
self.alphaValue = 1.0f;
self.backgroundColor = NSColor.clearColor;
self.opaque = NO;
self.hasShadow = NO;
}
return self;
}
...
现在您可以向此 window 添加 semi-transparent 视图,这些视图将显示为浮动在屏幕上。或者,您可以在此 window 中放置不透明视图,然后将 window 的整体 alphaValue
更改为小于 1.0
.
的值
我正在制作一个应用程序,它将在 Mac 上的实时屏幕上添加水印。我应该选择哪个API?我尝试了 NSScreen,但我没有找到任何可以将视图添加到 NSScreen 的方法。
像MacAppstore.Please中的Sakura之类的应用程序看看,我不知道我应该使用哪个API。
最简单的解决方案是定义一个自定义的、透明的、window。
当您创建 window 时,您指定了特殊的 BorderlessWindowMask
。这将创建一个 window,它是屏幕上没有标题栏、边缘等的简单矩形区域。
然后你设置一堆属性,这样
- window 漂浮在另一个 windows 之上
- 它不响应事件
- 没有影子
- 它的背景是透明的
以此类推
@implementation WatermarkOverlayWindow
- (id)initWithContentRect:(NSRect)contentRect
{
self = [super initWithContentRect:contentRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
if (self!=nil)
{
self.level = NSFloatingWindowLevel;
self.ignoresMouseEvents = YES;
self.releasedWhenClosed = NO;
self.movableByWindowBackground = NO;
self.alphaValue = 1.0f;
self.backgroundColor = NSColor.clearColor;
self.opaque = NO;
self.hasShadow = NO;
}
return self;
}
...
现在您可以向此 window 添加 semi-transparent 视图,这些视图将显示为浮动在屏幕上。或者,您可以在此 window 中放置不透明视图,然后将 window 的整体 alphaValue
更改为小于 1.0
.