gpt4 book ai didi

macos - 当 mouseDown 和 mouseUp 时重绘 NSButton

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

我对 NSButton 进行子类化并执行自定义绘图。我实现方法 -mouseDown-mouseUp。当我执行短(快速)单击时,我的代码工作完美,但如果我按住鼠标左键一段时间然后释放它,方法 -mouseUp 不起作用。也许我不明白按钮是如何工作的...所以我希望按钮在鼠标按下时改变外观,并在鼠标抬起时返回到之前的外观。我做错了什么?

最佳答案

出现此行为的原因是 Cocoa 中有两种不同的方法来处理鼠标拖动。两者都在这里讨论:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/HandlingMouseEvents/HandlingMouseEvents.html%23//apple_ref/doc/uid/10000060i-CH6-SW18

NSButton 最有可能使用“鼠标跟踪循环方法”,其中所有操作(包括鼠标向上事件)都是在 mouseDown: 方法中完成的。因此,如果您想知道,这就是您的 NSButton 子类中的情况:

- (void)mouseDown:(NSEvent *)event
{
someIvar = NO;

[super mouseDown:event];

//sometimes, when you are here, you have already had the "mouse up"
//because super's mouseDown did everything.

//to find out if this is the case, one solution would be to put
//an instance variable into your subclass (someIvar)

if (someIvar == YES)
{
//you have a "mouse up"
}
else
{
//you don't have a "mouse up"
}
}

- (void)mouseDragged:(NSEvent *)event
{
someIvar = YES;
}

关于macos - 当 mouseDown 和 mouseUp 时重绘 NSButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15742705/

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