cocoa - iPhone 上的 DrawRect 与 Mac 上的比较

标签 cocoa macos

我是一位经验丰富的 iPhone 开发人员,开始开发我的第一个 Mac 应用程序。真正让我失望的一件事是 UIView 和 NSView 之间的差异。看来我无法像使用 UIView 那样通过界面生成器设置 NSView 的背景颜色。我似乎也无法通过简单地向其发送 setBackgroundColor: 消息来做到这一点。我见过的所有示例都在 NSView 的子类中重写了 drawRect: 。这真的是唯一的方法吗?这里的概念差异是什么?为什么会这样?注意:我只是想将背景颜色设置为默认灰色。

最佳答案

回复:亚历克斯的回答:

这不仅是因为它更老了,而且是因为它更老了。或者更确切地说;……并不是它更旧了。事实上,UIKit更简单。 UIView 是一个比 NSView 更不通用的构造; Apple 在 iPhone 上插入内容丰富的应用程序的一般方法是使用 OpenGL 或 Core Animation,总体上将 UIView 降级为简单的容器内容。在这种情况下,setBackgroundColor: 很有用。

另一方面,在 Mac 上,NSView 是一个高度通用的界面元素,对于大多数用途来说,setBackgroundColor: 是完全不必要的。如果您使用 Mac 并更改背景颜色,十有八九这要么是因为您正准备自己绘制用户界面元素,要么您正在做的事情很可能不会受到 AHIG 的宽恕。

总结:

除了子类化它之外别无他法。 (NSView 是为了子类化而设计的,UIView 是为了即插即用而设计的。)

关于cocoa - iPhone 上的 DrawRect 与 Mac 上的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3040302/

相关文章:

objective-c - 在 otest 下运行 Cocoa 应用程序会导致 Release 模式下出现 dyld_misaligned_stack_error

html - 将 HTML 文本转换为普通文本在 Objective-C 中添加了额外的回车符

cocoa - 减少核心动画内存使用的技巧

对于配备 Retina 显示屏的 Mac Book Pro,Android 模拟器无法缩放到 100%

objective-c - 如何在 NSVisualEffectView 上叠加背景色并使用鲜艳的控件?

objective-c - NSAlert 调整窗口大小

macos - 带有标识符的 NSTableView 单元格始终给出 nil

objective-c - 本地化嵌套的 Info.plist 键

javascript - 发出 GET 请求时出错 "Failed to load resource: net::ERR_CONNECTION_REFUSED"

macos - OSX 用户空间设备文件