问题标签 [appkit]
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 - 学习掌握 AppKit 框架的最佳方法
我目前学习Objective-C和Cocoa有一段时间了,但我觉得我需要更多地了解AppKit框架。我经常怀疑应该将哪些组件用于特定用途。例如,我花了很多时间研究我应该如何简单地在两个 NSView 之间切换(与 NSTabView 相同,但没有它的选项卡,例如在 IBAction 中)。
我已经阅读了 Aaron Hillegass 的Cocoa Programming for Mac OS X,但我正在寻找接下来要阅读/做什么来扩大我对 AppKit 框架和使用 Cocoa 开发用户界面的知识。你建议我看什么?
先感谢您。
cocoa - NSProgressIndicator 不在图层支持的视图中设置动画
我NSProgressIndicator
在支持图层的视图的子视图中有条形样式。它的行为有点复杂,但在某些时候,它会显示为条形的不确定进度指示器。问题是,当处于这种状态时,它不会动画(即旋转理发杆)。关闭图层支持解决了这个问题,但这会使窗口的其他动画不太流畅,所以我希望有更好的东西。
这是完整的行为:当设置了一个脏标志时,它应该作为一个不确定的动画进度指示器变得可见;然后经过短暂的延迟(以确保用户已完成输入),它会转换为确定的进度指示器并在执行各种操作时填充;最后,在整个过程结束时,它再次隐藏起来。
为了实现这一点,我设置了以下绑定:
- Hidden通过值转换器绑定到我的模型的
loading
属性。NSNegateBoolean
- Is Indeterminate绑定到我的模型的
waitingForInput
属性。 - 值绑定到我的模型的
currentProgress
属性(waitingForInput
为真时为 0)。 - Max Value绑定到我的模型的
maximumProgress
属性(waitingForInput
为真时为 0)。
这主要是有效的,但有一个例外:当waitingForInput
是YES
,因此进度指示器是不确定的,进度指示器不动画。
进度指示器不更新的通常原因是程序员正在使用长时间运行的操作阻塞运行循环,但我没有这样做:在有问题的期间,运行循环是完全打开的,只有一个计时器等待开火。据我所知,它也不是某种奇怪的模式。该应用程序在此期间接受击键和其他事件,没有任何问题。(后期阶段,随着确定的进度指示器被填满,由异步驱动NSURLConnection
,所以它也不是阻塞的。)
我已经采取了几个步骤来尝试解决这个问题:
- 我尝试将进度指示器上的Animate
waitingForInput
绑定设置为模型的属性,例如Is Indeterminate。这会导致动画在更改通知触发时突然更新waitingForInput
(waitingForInput
碰巧在每次输入延迟重新启动时发送 KVO 通知),但我希望动画比这更流畅。 - 我尝试使用 KVO 来观察
loading
和的变化waitingForInput
。当观察到变化时,它会酌情调用进度指示器-startAnimation:
和-stopAnimation:
方法。这些没有明显的效果。 - 我尝试将
usesThreadedAnimation
进度指示器设置为NO
. (谷歌上的一个热门建议这可能有助于更新层支持的进度指标的问题。)这没有明显的效果。我也试过YES
,只是为了踢球,这同样是徒劳的。
最后,我还尝试关闭图层支持。当与 Animate 绑定结合使用时,这确实解决了问题。但是,它会不可接受地降低其他动画的性能,所以我宁愿避免这样做。
那么,任何想法,任何人?我真的很感激这个问题的一些帮助!
macos - UISwitch,Mac 类似的东西?
我相信你们中的大多数人都熟悉UISwitch
iOS 上的。
他们是否有任何现有项目试图UISwitch
为 macOS 和 AppKit 实现类似的东西?
如果没有,从哪里开始制作一个?我经常看到它们,并且可以想到很多用途。
cocoa - 什么可能导致 -[NSPasteboard types] 崩溃?
我们的一位客户在粘贴时有时会看到这样的崩溃:
有谁知道可能导致这种情况的原因?
- 据我所知,粘贴板对象是有效的,但随后在内部崩溃。
- 我认为这通常是从另一个应用程序粘贴时,是否有可能另一个应用程序管理不善其对粘贴板的所有权?
来自 NSPasteboard 是否保留所有者对象的更多信息?说是的,粘贴板保留了传递给它的所有者。因此,此崩溃必须是:
- 我的代码中的过度发布。这会导致一个对象被释放,而粘贴板仍然持有对它的引用。我认为这不太可能,因为您希望问题会独立于粘贴板而出现,而且我还没有看到一个崩溃(报告)表明这一点。
NSPasteboard
管理跨应用程序粘贴的方式出现问题并崩溃。有没有人遇到过这样的事情或者知道是什么原因造成的?
objective-c - AppKit 的链接问题
我使用 XCode3.2.1 创建了一个类,我想让它继承自 NSViewController (或任何其他 AppKit 实体)。
我已经在 Cocoa 库中链接了,但是我得到了找不到类头文件的错误
我的项目中有其他类可以毫无问题地继承 Cocoa 类。如果我让它继承自属于 Framework 或 CoreData 的类(例如 NSObject、NSArray、NSEntityDescription),我没有任何错误。
有什么建议么?
cocoa - NSTimer 没有效果...?
我试图在 NSTimer 选择器中调用 [self setNeedsDisplay:YES] 以触发 drawRect 方法。
起初,我将 NSTimer 初始化代码放在一个按钮函数中:
“setNeedsDisplay”被正常调用,但 drawRect 内的代码从未被调用:
然后我尝试将 NSTimer 初始化代码移动到“- (id)initWithFrame:(NSRect)frame”,然后一切正常。(drawRect每1秒正确调用一次)。
上述两种方法有什么区别?如果我想在按钮中触发 Timer,我应该怎么做?
objective-c - NSPasteboard 是否保留所有者对象?
你可以NSPasteboard
这样调用:
这意味着粘贴板稍后会要求所有者根据需要提供类型的数据。但是,我无法从文档中找到(也许我错过了一些明显的出血),是是否owner
保留。
实际上,我担心的是,如果所有者是弱引用,它可能会被释放,如果粘贴板随后尝试从它请求数据,则会导致崩溃。
注意:我可能应该澄清一下,我对此感兴趣更多是为了帮助追踪错误,而不是让我的应用程序依赖它。但我也希望澄清文档。
macos - 更改窗口背景的 alpha,而不是整个窗口
所以我有一个快速的问题,我有下面的方法,它根据滑块的值设置窗口的 alpha 值,但是窗口的内容也变得半透明并最终随着窗口消失。
有没有办法只改变窗口的 alpha 值而不是里面的内容视图?
谢谢,萨米。
cocoa - 可可中的 ShowWindow/HideWindow
在 Carbon 中,您可以使用 HideWindow(WindowRef) 和 ShowWindow(WindowRef) 更改窗口的可见性。
在 Cocoa 中,我知道您可以调用 NSWindow 的 orderOut: 来隐藏和 orderFront:、orderBack: 或 orderWindow:relativeTo: 将其放回屏幕上,但是这些都不尊重窗口在上次可见时相对于其他窗口的顺序。
例如,如果我有两个窗口,一个在另一个之上,然后在后窗口上调用 orderOut:,如何在不调用 orderWindow:relativeTo:的情况下再次显示窗口以使其仍在前窗口后面。
我现在唯一能想到的就是记住它正上方窗口的窗口ID,然后在再次显示时使用 orderWindow:relativeTo: ,但是我没有想过如果上面的窗口在之前关闭会发生什么后窗再次可见。
cocoa - 如何在 Mac OS X 上绘制桌面?
我想在 Mac OS X (Snow Leopard) 上绘制桌面。具体来说,我想达到和运行一样的效果:
(如果您不在计算机附近,这将显示您通常会看到桌面背景的屏幕保护程序。)
我知道如何制作一个没有边框的窗口(通过继承 NSWindow 并覆盖 initWithContentRect:styleMask:backing:defer: 将窗口样式设置为 NSBorderlessWindowMask)并且没有阴影(setHasShadow:NO.)
我知道我可以调用 setLevel:kCGDesktopWindowLevel 或 kCGDesktopIconWindowLevel 将我的窗口放在其他窗口下方(请参阅问题 418791。)但这并不是我想要的,因为此级别的窗口仍然位于桌面图标之上。我想在桌面背景之上,但在图标之下。
我的观点是不透明的。如果有一种技术可以破坏桌面背景,那没关系。