cocoa - NSRect 的副本不显示

标签 cocoa nsview nsrect

我正在尝试制作一个简单的 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/

相关文章:

cocoa - 如何在核心数据中存储没有时间的日期

cocoa - NSMenuItem 数字气泡?

cocoa - 如何知道是什么原因导致调用drawRect?

objective-c - 获取 NSView 屏幕矩形和显示 ID

ios - 每个 .xib 文件都必须有自己的 .h 和 .m 文件吗?

objective-c - 不从 MainMenu.xib 加载窗口,而是加载另一个窗口

cocoa - 将 NSPoint 从窗口坐标转换为 View 坐标

objective-c - 保存 NSView 表示忽略透明度

uiview - NSPoint、CGPoint、NSSize、CGSize和NSRect、CGRect的单位是什么?

objective-c - Objective C 在自定义 View 中更改 NSRect 的自动调整大小