Mac开发-自定义NSPopover背景色(替换其三角部分)

文章目录

  • NSPopover
    • 简单使用
    • apperance
    • 弹出样式 NSPopoverBehavior
    • 出现位置
  • 分析图层结构

NSPopover

NSPopover是Mac 10.7 以上的方便弹出控件(10.7之前可以使用这个INPopoverController),需要依赖NSViewController来使用.

最近需要做一个控件,区别就是背景色不一样,所以想到了替换其背景色实现。


简单使用

    self.popover = [[NSPopover alloc]init];self.popover.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua];self.popover.contentViewController = //你创建的NSViewController;self.popover.behavior = NSPopoverBehaviorTransient;[self.popover showRelativeToRect:sender.frame ofView:sender.superview preferredEdge:NSRectEdgeMaxY];

apperance

有以下几种类别

NSAppearanceNameAqua  10.9之后
NSAppearanceNameDarkAqua 10.14之后10.10之后
NSAppearanceNameLightContent 
NSAppearanceNameVibrantDark  //变成黑色背景
NSAppearanceNameVibrantLight //默认

弹出样式 NSPopoverBehavior

typedef NS_ENUM(NSInteger, NSPopoverBehavior) {NSPopoverBehaviorApplicationDefined = 0,  NSPopoverBehaviorTransient = 1,NSPopoverBehaviorSemitransient = 2
};

弹出的效果上没有什么区别
NSPopoverBehaviorApplicationDefined 点击其他地方,不会自动消失。


出现位置

typedef NS_ENUM(NSUInteger, NSRectEdge) {NSRectEdgeMinX = CGRectMinXEdge, //左侧NSRectEdgeMinY = CGRectMinYEdge, //下方NSRectEdgeMaxX = CGRectMaxXEdge, //右侧NSRectEdgeMaxY = CGRectMaxYEdge, //上分
}

这里即MinX即取X轴的最小值,由于Mac坐标系是左下角的,即X轴从左至右Y轴从下至上

这里的方向应该和坐标系有关,如果视图翻转isFlipped为YES则有可能变化,这里不再验证。

分析图层结构

NSPopover会将所设置的NSViewController添加到其内容视图上

例如我们的NSViewController的xib内容如下:
在这里插入图片描述
最终的弹出的Popover视图为:
在这里插入图片描述
绿色部分为NSViewController.view,红色部分为NSPopover的内容视图,即我们需要修改NSPopover的内容视图的背景色。

通过superview指针来获取:

	NSView *popoverView = [[[self contentViewController] view] superview];[popoverView setWantsLayer:YES];[[popoverView layer] setBackgroundColor:[NSColor colorWithRed:46/255.0 green:53/255.0 blue:59/255.0 alpha:1].CGColor];

最终效果:
在这里插入图片描述
代码地址以及Demo 链接:https://pan.baidu.com/s/12JhMecVLhj8LdRuiLt2wCg 密码:va2y

这样我们就达到了自定义其背景色的效果


参考文章: https://blog.csdn.net/lovechris00/article/details/77996141
https://stackoverflow.com/questions/19978620/how-to-change-nspopover-background-color-include-triangle-part


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部