问题标签 [nsview]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - 调暗 NSWindow 并在顶部层 NSView
有什么办法可以使我的 NSWindow 变暗(基本上在它上面放一个黑色透明层,你不能点击),然后在上面分层一个自定义的 NSView ?
objective-c - NSView 子类中的鼠标单击事件
我有一个 NSView 子类,它使用 OpenGL 上下文进行初始化,并且有一堆鼠标事件处理(onMouseDown 等)。我有一个使用它的应用程序,它有一个包含视图的主 Cocoa 窗口,并且所有鼠标事件都正常工作。
但是,我现在正在尝试在另一个应用程序中使用它,在该应用程序中我有一个弹出打开的辅助窗口并使用视图进行初始化,当我移动鼠标时,我似乎没有得到任何鼠标点击(或键盘那件事)任何事件。
当我在视图上单击并拖动时,整个窗口都会移动,我猜这与我没有得到任何鼠标事件的原因有关。我有acceptsFirstResponder 和acceptsFirstMouse 返回YES,甚至有hitTest 返回self 以进行良好的衡量。
你们有什么想法可能是错的吗?
objective-c - 在视图控制器中处理发送给第一响应者的消息
我一定错过了一些简单的东西,但我看不到它。首先,设置:
DATreeView
, 的一个子类NSView
DATreeViewController
, 的一个子类NSViewController
MainMenu.xib
有一个 的实例DATreeViewController
,它被配置为从DATreeView.xib
MainMenu.xib
还有一个 的实例DendreaAppDelegate
,它有一个DATreeViewController
插座(连接到MainMenu.xib
' 的DATreeViewController
实例。Do Something!
,一个连接起来的菜单项,用于向doSomething:
第一响应者发送消息。- 并非巧合,
DATreeViewController
有一个动作叫doSomething:
.
我想要的是Do Something!
菜单项触发doSomething:
操作DATreeViewController
,让我们假设我不能直接设置目标/操作连接。我会在这里停下来问,我的设计完全错误吗?我正在尝试做的事情是愚蠢/邪恶/可能在我的上帝眼中让我感到羞耻吗?
不?伟大的。现在,对于我的生活,我无法让菜单项处于活动状态。我在 Snow Leopard 上这样做,如果这有什么不同的话。
为了实现NSView
和之间的良好集成NSViewController
,例如管理响应者链,我遵循了Matt Gallagher 的示例,进行了一项实质性更改:在 NIB 加载过程中NSView
似乎没有收到setViewController:
消息,所以我自己发送该消息DATreeViewController
的loadView
讯息。据我所知,在运行以下代码后applicationDidFinishLaunching:
响应者链按预期设置,即:
我的期望是,作为DATreeViewController
响应者链的一部分,作为响应者链的一部分,作为响应者doSomething:
,并且因为它不实现验证,我所要做的就是使用 Interface Builder 将Do Something!
菜单项连接到 First Responder 代理,doSomething:
作为其操作,菜单项将自动激活。
我究竟做错了什么?感谢大家的宝贵帮助!
cocoa - 使 NSScroller 更大
我正在制作一个针对外部触敏屏幕优化的 Cocoa 应用程序,所以我想在 NSScrollView 中制作一个大的 scollbar。我试图调整滚动框的大小,但绘图和鼠标事件都只发生在滚动区域,它不会变宽(它是垂直滚动条)。这是我正在使用的代码(来自子类 NSScrollView):
我尝试将 NSScroller 子类化,但我不知道如何扩展它。
cocoa - 为什么 bitmapImageRepForCachingDisplayInRect: 创建一个空图像?
我有一段非常简单的代码,应该可以捕获视图的位图。这曾经在 Leopard 中有效,但在 Snow Leopard 中似乎非常糟糕。
这是代码,响应窗口上的按钮按下:
单击按钮拍摄快照只会产生完全透明的图像。
我在这里完全一无所知,还是这个位图缓存方法坏了?
一个简单的项目——基本上是一个启动 NSDocument 项目,带有一个调用此代码的按钮——可以在这里找到。
objective-c - 调整 NSCollectionViewItem 的视图大小
如何以编程方式设置 NSCollectionViewItem 的视图大小?
我尝试在 NSCollectionView 子类中这样做:
但是,此代码无效。我尝试将我用于 NSCollectionViewItem 的 NSView 子类化,并将 setFrame: 添加到 initWithCoder 方法,但是当我这样做时,我遇到了 EXC BAD ACCESS 崩溃。
objective-c - 灰显 NSWindow 的内容
我有一个NSWindow
with 2 NSViews
(一个NSSplitView
和一个 custom NSView
)。访问数据以填充这些视图可能需要一些时间。在此期间,我想将这些视图的内容灰显。
我的第一种方法是让黑色三分之一NSView
覆盖另外两个,并通过更改其 alpha 值来实现变灰效果。但是,从那以后,我了解到具有兄弟视图的层次结构是未定义的。
这里最好的方法是什么?
- 缓存
NSBitmapImageRep
2 个视图,然后将它们替换为第 3 个视图,使用缓存的图像作为背景 - 分别设置每个视图的 alpha 值(仍然不太清楚如何获得灰色背景的黑色背景)
- 我没有考虑过的事情
cocoa - 在 Mac 上的 Cocoa 中区分单击和双击
我有一个习俗NSView
(这是众多习俗中的一个,它们都生活在一个NSCollectionView
——我认为这无关紧要,但谁知道呢)。当我单击视图时,我希望它更改其选择状态(并相应地重绘自身);当我双击视图时,我希望它为刚刚双击的对象弹出一个更大的预览窗口。
我的第一个看起来像这样:
大部分工作正常。除了,当我双击视图时,选择状态发生变化并弹出窗口。这不正是我想要的。
好像我有两个选择。我可以在响应双击时恢复选择状态(撤消错误的单击),或者我可以找到某种NSTimer
解决方案以在响应单击之前建立延迟。换句话说,我可以确保在更改选择状态之前不会再次单击。
这看起来更优雅,所以这是我一开始采用的方法。我从 Google 中找到的唯一真正的指导是在一个名称中带有连字符的未命名网站上。这种方法主要适用于一个很大的警告。
悬而未决的问题是“我应该NSTimer
等多久?”。未命名的站点建议使用 Carbon 函数GetDblTime()
。除了在 64 位应用程序中无法使用之外,我能找到的唯一文档说它正在返回时钟滴答声。而且我不知道如何将这些转换为秒数NSTimer
。
那么这里的“正确”答案是什么?摸索GetDblTime()
?双击“撤消”选择?我无法弄清楚可可惯用的方法。
nsview - 具有自定义视图的自定义 NSStatusItem - 使用 NSWindow、NSView、自定义 NSMenuItem?
我正在尝试创建一个 LSUIElement 应用程序,其行为类似于 Spotlight、CoverSutra 和该类型的其他应用程序。我设法创建了一个自定义 NSStatusItem,它会弹出一个 NSWindow,但问题是当前具有焦点的应用程序将焦点放在我的自定义 NSWindow 上。
我以 Matt Gemmell 的示例为基础(http://mattgemmell.com/2008/03/04/using-maattachedwindow-with-an-nsstatusitem)
例如,如果您在 Safari 中并单击 Spotlight 图标,则当前 Safari 窗口不会灰显并保持焦点。当您在 Spotlight 中按 ESC 时,焦点将返回到 Safari 窗口。
我没有设法用我的自定义 NSWindow 做到这一点。我必须单击一个窗口才能将焦点重新设置回它。
所以我想知道要实现这一目标的路线。解决方案是带有自定义 NSMenuItem 的 NSWindow、NSPanel、NSMenu 吗?
objective-c - 在 NSScrollView 中居中 NSView
如何像“预览”那样在 NSScrollView 中居中 NSView?