如何在没有额外自定义代码的情况下强制使正在运行的 Cocoa 程序失效?

Posted

技术标签:

【中文标题】如何在没有额外自定义代码的情况下强制使正在运行的 Cocoa 程序失效?【英文标题】:How can I force invalidation of a running Cocoa program without additional custom code? 【发布时间】:2009-09-01 21:31:09 【问题描述】:

我的 Cocoa 程序中有多个自定义 NSView。我正在寻找一种方法来强制它们无效,而无需在程序运行时添加额外的代码。如果我在带有 .NET 框架的 Windows 上执行此操作,我只需将程序的一部分拖出屏幕并再次拖回即可。屏幕外的区域在重新出现时会失效。我还没有弄清楚如何使用 Cocoa - OSX 来做到这一点。

【问题讨论】:

pgb 提供了一种编程方式来执行此操作,您似乎不满意,因为它需要代码。这与编程有关吗? 他在调试。就像,如果你盯着屏幕上的一个误绘,并想知道“如果我强制完全重绘,这看起来仍然是错误的”,你如何让它重绘?或者,如果你刚刚在接下来的事情发生时设置了一个断点,你如何让它发生? 【参考方案1】:

setNeedsDisplay 方法应该这样做:

- (void)setNeedsDisplay:(BOOL)flag
- (void)setNeedsDisplayInRect:(NSRect)invalidRect

文档here

【讨论】:

我的问题不清楚。我想在程序运行时导致失效。【参考方案2】:

Mac OS X 上的 Windows 由 Window Server 缓冲,不能通过在屏幕上移动它们来强制重绘。用户可以强制重绘的唯一方法是调整窗口大小。

为什么你需要这样做呢?

【讨论】:

【参考方案3】:

最小化窗口并取消最小化。这恰好会强制重绘。

【讨论】:

【参考方案4】:

我建议你试试 F-script http://www.fscript.org/。它允许您在程序运行时调用 Cocoa 对象上的方法。

您可以使用它直接在您想要无效的视图上调用setNeedsDisplay:(BOOL)flagsetNeedsDisplayInRect:(NSRect)invalidRect 方法。

【讨论】:

以上是关于如何在没有额外自定义代码的情况下强制使正在运行的 Cocoa 程序失效?的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 TensorFlow 在 float16 下运行?

如何在没有范围的情况下在 laravel 路由中使用自定义键?

如何在 GCC 下强制设置“布尔”的大小

强制任何正在运行的进程崩溃

如何使自定义标签中的代码块仅在第一次调用该标签时运行?

默认情况下,使emacs以控制台模式(-nw)运行