【发布时间】:2014-07-26 18:27:44
【问题描述】:
这是一个使用 Cocoa 和 Objective-C 编写的 Mac 应用程序。
我有一个自定义的 NSView 类,它本质上用作按钮的集合并存储所选按钮的值。有点像一个 NSSlider,它捕捉到刻度线,但使用按钮而不是滑块。左下图就是它的样子。
现在我想做的是,当鼠标移到每个按钮上时,它会用半透明的蓝色覆盖该按钮,然后单击它时会停留在那里。我做了几次尝试,你可以在右图中看到最新的结果:
这是在将鼠标悬停在所有按钮上之后发生的情况。由于某种原因,它使用窗口的原点进行绘制,而不是在 MyButtonView 内绘制。此外,它不是半透明的。我还没有担心当鼠标离开矩形时重绘普通按钮,因为这部分还没有工作。
下面是相关代码。
MyButtonView 类的 initWithFrame 方法内部:
for (int i = 0; i < 12; i++) {
yOrigin = kBorderSize + (buttonHeight * i) + (kSeparatorSize * i);
NSRect newRect = { {xOrigin, yOrigin}, {buttonWidth, buttonHeight} };
[buttonRectangles addObject:NSStringFromRect(newRect)];
[self addTrackingRect:newRect owner:self userData:NULL assumeInside:NO];
}
绘制蓝色矩形的方法:
- (void)mouseEntered:(NSEvent *)theEvent {
NSRect rect = [[theEvent trackingArea] rect];
[self drawHoverRect:rect withColor:hoverBlue];
}
- (void)drawHoverRect:(NSRect)rect withColor:(NSColor *)color {
[color set];
NSRectFill(rect);
[self displayRect:rect];
}
我不知道该怎么做。我已经研究了几个小时 Apple 的文档,但无法弄清楚。显然,我不是 Cocoa 或 Objective-C 的老手,所以我希望得到一些帮助。
【问题讨论】:
标签: cocoa mouseevent nsview