cocoa – 自定义NSWindow,带有圆角,可剪辑子视图

cocoa – 自定义NSWindow,带有圆角,可剪辑子视图,第1张

概述我正在尝试创建一个自定义的NSWindow,所以我创建了一个带有适当的无边框窗口掩模并且可以工作.我提供自己的内容视图很好.但我想要做的是绘制圆角,也可以将子视图剪切到那些角落.这可能吗? 在我的内容视图中,我可以覆盖drawRect:并绘制一个带圆角的路径,但是当我向其添加子视图时,它们不会被剪裁. 我可以改为使我的内容视图支持图层并给它一个角半径(maskToBounds设置为YES)但是当我 我正在尝试创建一个自定义的NSWindow,所以我创建了一个带有适当的无边框窗口掩模并且可以工作.我提供自己的内容视图很好.但我想要做的是绘制圆角,也可以将子视图剪切到那些角落.这可能吗?

在我的内容视图中,我可以覆盖drawRect:并绘制一个带圆角的路径,但是当我向其添加子视图时,它们不会被剪裁.

我可以改为使我的内容视图支持图层并给它一个角半径(maskToBounds设置为YES)但是当我添加子视图时,它们仍然没有被我的圆角修剪.

有没有办法做到这一点?或者某种方式来绘制一个没有标题栏的NSWindow并且我可以完全控制绘图,并保持圆形的剪裁角落?

解决方法 我能做的是提供我的NSWindow的自定义子类:

@implementation ELGRounDWindow- (ID)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSbackingStoreType)bufferingType defer:(BOol)flag{    self = [super initWithContentRect:contentRect styleMask:NSborderlessWindowMask backing:bufferingType defer:flag];    if ( self )    {        [self setStyleMask:NSborderlessWindowMask];        [self setopaque:NO];        [self setBackgroundcolor:[NScolor clearcolor]];    }    return self;}- (voID) setContentVIEw:(NSVIEw *)aVIEw{    aVIEw.wantsLayer            = YES;    aVIEw.layer.frame           = aVIEw.frame;    aVIEw.layer.cornerRadius    = 20.0;    aVIEw.layer.masksToBounds   = YES;    [super setContentVIEw:aVIEw];}@end

然后在IB中,我将我的内容视图的类更改为ELGRoundVIEw:

@implementation ELGRoundVIEw- (voID)drawRect:(NSRect)dirtyRect{    [[NScolor colorWithCalibratedRed:0.0 green:0.5 blue:1 Alpha:1] set];    NSRectFill(dirtyRect);}@end

我在内容视图中放置了另一个方形子视图,其中包含以下内容:

@implementation ELGSquareVIEw- (voID)drawRect:(NSRect)dirtyRect{    [[NScolor colorWithCalibratedRed:0.0 green:0 blue:1 Alpha:1] set];    NSRectFill(dirtyRect);}@end

我结束了:

总结

以上是内存溢出为你收集整理的cocoa – 自定义NSWindow,带有圆角,可剪辑子视图全部内容,希望文章能够帮你解决cocoa – 自定义NSWindow,带有圆角,可剪辑子视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1020735.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存