小编Jos*_*rth的帖子

在标准NSWindow上创建自定义标题栏

我一直在努力为我的菜单栏应用程序构建一个特定的外观.

在此输入图像描述

我一直在使用一个NSWindowNSBorderlessWindowMask式面膜和设置[window setOpaque:NO][window setBackgroundColor:[NSColor clearColor]].这给了我一个空白的画布,非常适合标题栏.

现在我遇到了基于视图的问题,NSTableView我正在使用该列表.如何将NSTableCellViews 剪裁到窗口的圆角?

我开始只是有一个自定义视图包装NSTableView,用圆角绘制背景.[view addClip:path]虽然使用不剪辑子视图.

我也试过用[view setWantsLayer:YES]面具.这很有效,但桌面视图单元格会偶尔出现故障.似乎拥有一个NSScrollView图层的孩子是一个已知的问题:

http://i.stack.imgur.com/JmhjD.png

我当前的视图结构类似于:

NSWindow
- MyTitleBarView
- MyBackgroundView
  - NSScrollView
    - NSTableView
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nstableview nswindow nsscrollview

7
推荐指数
1
解决办法
5139
查看次数

动画图层支持视图时缩放图层内容

我正在为包含多个子视图的图层支持视图设置动画。一切都使用自动布局进行布局。目前,当我为视图设置动画时,子视图不会随之缩放:

动画片

我希望将整个事物绘制一次,以它们的最终尺寸绘制,然后在动画播放时进行缩放。该layerContentsPlacementlayerContentsRedrawPolicy性能似乎是什么我正在寻找,但改变他们似乎没有任何效果。

这是我如何制作动画的基本流程:

// Add itemView to canvas
NSView *itemView = // ...
itemView.layerContentsPlacement = NSViewLayerContentsPlacementScaleProportionallyToFit;
itemView.layerContentsRedrawPolicy = NSViewLayerContentsRedrawBeforeViewResize;
[parentView addSubview:itemView];

// Add constraints for the final itemView frame ...

// Layout at final state
[parentView layoutSubtreeIfNeeded];

// Set initial animation state
itemView.alphaValue = 0.0f;
itemView.frame = // centered zero'ed frame

// Set final animation state
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
  context.duration = 0.25f;
  context.allowsImplicitAnimation = YES;

  itemView.alphaValue = 1.0f;
  [parentView layoutSubtreeIfNeeded];
} completionHandler:nil];
Run Code Online (Sandbox Code Playgroud)

cocoa animation core-animation appkit autolayout

5
推荐指数
1
解决办法
1078
查看次数

是否有一种可靠的方法来检测子视图中的第一响应者更改?

我建立一个包含其他几个子视图(自定义视图NSTextField,WebView...).当其中一个子视图是第一个响应者时,我想让我的自定义视图绘制一个不同的边框,并作为一个可以通过菜单项和键盘快捷键操作的单个项目.它看起来像这样:

+-------------+
| NSTextField |
+-------------+
| WebView     |
+-------------+
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经成功的子类NSTextField和其他通知委托时- (BOOL)becomeFirstResponder- (BOOL)resignFirstResponder被调用.这种方法不起作用WebView,因为它本身包含许多子视图 - 我不能将它们全部子类化!

是否有更好的方法来检测子视图何时更改其第一响应者状态?或者更好的方法来创建自定义视图?

cocoa objective-c webview nsview first-responder

5
推荐指数
2
解决办法
2932
查看次数