如何在没有额外自定义代码的情况下强制使正在运行的 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)flag
或setNeedsDisplayInRect:(NSRect)invalidRect
方法。
【讨论】:
以上是关于如何在没有额外自定义代码的情况下强制使正在运行的 Cocoa 程序失效?的主要内容,如果未能解决你的问题,请参考以下文章
如何强制 TensorFlow 在 float16 下运行?