gpt4 book ai didi

cocoa - NSRect 的副本不显示

转载 作者:行者123 更新时间:2023-12-03 17:53:24 27 4
gpt4 key购买 nike

我正在尝试制作一个简单的 Cocoa 程序。我有一个小黑盒(NSView 的子类,在屏幕上绘制 NSRect)跟随我的鼠标。那部分我正在工作。我需要它做的是:当我单击鼠标时,我想留下那个黑匣子的“副本”。

我已经尝试让它工作五个多小时了,并且我已经尝试了所有的方法。我确信解决方案很简单,我的猜测是我缺少对基本概念的掌握。

这是我所拥有的(“保留”应该是留下的副本):

@property NSMutableArray *stays;

...

- (void) makeStay {
if (!_stays)
_stays = [[NSMutableArray alloc]init];

NSValue *newStay = [NSValue valueWithRect:self.frame];
[_stays addObject:newStay];
}

...


-(void)drawRect:(NSRect)rect {
[[NSColor blackColor] set];
NSRectFill([self bounds]);

for (int x = 0; x < _stays.count; x++) {
NSRectFill([_stays[x] rectValue]);
}
}

任何有关如何理解 NSView 基础知识以便其发挥作用的帮助,我们将不胜感激!

最佳答案

根据您的代码,我猜测您的问题是有界限的。

看起来您有一个在屏幕上移动的 NSView - 所以它的框架是它在其 super View 中的位置,这就是您在 makeStay 中保存的内容.

在您的drawRect中,您填充 View 的边界 - 这是在 View 坐标中。然后,您尝试填充“停留”,这些位于 super View 坐标中,但将被视为 View 坐标,并且无疑位于 View 边界之外,因此将被剪切。

尝试使用“板” View 填充您的窗口,并将您的框 View 作为其 subview 。板 View 应保留并绘制“停留”列表,单击时的“框” View 应将其当前帧添加到板 View 列表中。这些停留将始终在董事会的范围内。

HTH。

关于cocoa - NSRect 的副本不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18329807/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com