我正在尝试管理OS X应用程序上的简单按钮的不同状态:当用户单击它时,以及当用户释放单击时。
目前我通过 NSMomentaryLightButton
设置我的按钮类型NSMomentaryLightButton单击按钮(打开状态)时,它 看起来很明亮如果按钮有边框,也可能出现 凹陷。释放按钮后,它将恢复正常(关闭) 状态。
这种类型的按钮最适合简单地触发操作,因为它 不显示其状态;它始终显示其正常图像或标题。 此选项在Interface Builder的Button中称为Momentary Light 检查员
我认为这是好方法,但是当我打印我的按钮状态时,它就像一个切换按钮而不是我设置的按钮。正如您在exemple gif
上看到的那样总结一下,我如何才能拥有真正的按钮行为?当用户点击它时以及当用户释放点击时调用功能。
感谢,
答案 0 :(得分:1)
您不想使用钢琴键按钮。首先,它们是非矩形的,并且它们不像按钮那样起作用:既不是单动按钮,也不是切换开关。您正在使用自定义视图以自定义方式进行交互,这意味着不需要NSButton
控件层次结构。相反,您将继承NSView
子类并捕获低级鼠标事件,如下所示:
你自己在自己的评论中详细说明了这一点,但我想确保你有更高层次的观点。将所有钢琴键合并到单个视图中,甚至可能是最好的,并让键本身使用{{1}进行渲染并使用NSBezierPath
执行鼠标点击检测:
这是很多更多的工作,但却是制作真正专业的钢琴模拟的唯一方法。然后,您可以使用您需要的任何轮廓,填充和标签来渲染键,而不受内置按钮形状和布局的限制。例如,您甚至可以将键的下边缘略微倒圆,或者应用闪亮的纹理。