我正在尝试制作一个简单的 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 将不会像您预期的那样移动。
(顺便说一句:bounds
和frame
都是NSRect,所以没有理由用矩形的各个成员调用NSMakeRect
如果你只是想将它们全部不加改变地传递。)
*不是像素。 View 的坐标以点为单位,这是从 PostScript 点(1/72 英寸)派生的一个虚数单位;您不能也不应该依赖等于像素的点。
关于cocoa - 当我将其框架设置为其现有边界时,为什么我的 View 会移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8251151/