cocoa - 当我将其框架设置为其现有边界时,为什么我的 View 会移动?

标签 cocoa nsview

我正在尝试制作一个简单的 NSView 动画。该 View 有一些奇怪的“跳跃”问题,我设法将代码精简为

[editView setFrame:NSMakeRect([editView bounds].origin.x,
    [editView bounds].origin.y,
    [editView bounds].size.width,
    [editView bounds].size.height)];

它仍然会产生“跳跃”问题。当我运行这个时,我希望 View 根本不会移动,但在第一次且只有第一次,它会向左跳约 200px。可能出了什么问题?

最佳答案

框架和边界不是一回事。 View 的框架是其在其父 View 坐标系中的位置和大小,而其边界是其自身坐标系的原点和大小。

默认情况下, View 边界的原点位于 0, 0。这与其框架的位置无关。因此,当您将位于 200, 0(在其父坐标中)的 View 的框架更改为 0, 0 时,您将其向左移动 200 点*。

如果将 View 的框架设置为它的框架, View 将不会像您预期的那样移动。

(顺便说一句:boundsframe都是NSRect,所以没有理由用矩形的各个成员调用NSMakeRect如果你只是想将它们全部不加改变地传递。)

*不是像素。 View 的坐标以点为单位,这是从 PostScript 点(1/72 英寸)派生的一个虚数单位;您不能也不应该依赖等于像素的点。

关于cocoa - 当我将其框架设置为其现有边界时,为什么我的 View 会移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8251151/

相关文章:

objective-c - NSCollectionView 中的选择突出显示

objective-c - 为什么 NSSet objectEnumerator 会增加保留计数?

cocoa - Xcode : Can't Build Downloaded Project because Compiler Cannot Find a Framework

objective-c - 将 View 的 Alpha 设置为从 0 到 0.5 的动画

swift - cocoa swift : WKWebView is not showing when is add it as subview

objective-c - subview 的位置错误

objective-c - Cocoa:获取 TableView 单元格来发送操作消息

macos - 如何在 Mac OSX 应用程序(如 OSK)上的另一个应用程序的光标位置插入文本?

cocoa - 在 Cocoa 中创建启动屏幕

objective-c - NSView显示和隐藏SubView