2016-08-20 4 views
2

OS Xアプリケーションで、単純なプッシュボタンの異なる状態を管理しようとしています。ユーザーがクリックすると、ユーザーがクリックを解放したときです。NSButtonをSwiftでクリックしてリリースイベントを処理する

は現在、私は、ボタンがクリックされたNSMomentaryLightButton(オン状態)

NSMomentaryLightButton で私のボタンのタイプを設定し、それ が点灯表示されます。ボタンに罫線がある場合は、 と表示されることがあります。ボタンを離すと、通常の(オフ) の状態に戻ります。

このタイプのボタンは、 の状態が表示されないため、アクションをトリガするのに最適です。通常のイメージまたはタイトルを常に表示します。 このオプションは、私はそれが良い方法だと思ったが、私は私のボタンの状態を印刷するとき、それは私が設定プッシュボタンよりトグルボタンのようなものだInterface Builderののボタン インスペクタ

に瞬時ライトと呼ばれています。あなたが見ることができるようにexemple gif

合計すると、私は本当のプッシュボタンの動きを持つことができますか?ユーザーがクリックしたとき、およびユーザーがクリックを解放したときに関数を呼び出します。

ありがとう、

+0

通常のプッシュボタンを使用すると、ユーザーがクリックを解除したときにのみアクションが発生します。ボタンを押したときに別のアクションを期待する人はいません。彼らはまだ自分の考えを変えるチャンスがあります。どういう意味ですか?https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSButtonCell_Class/index.html#//apple_ref/c/econst/NSPushOnPushOffButton?トグルスイッチ、つまり?あなたの言語を明確にすることはできますか? – BaseZen

+0

私の悪い英語のために申し訳ありません。私のアプリケーションでは、ボタンはピアノのキーボードから来ているので、ユーザーがプッシュダウンしたときに何かトリガーしたい、そしてプッシュアップするときに他のものをトリグにしたい。現在のところ、ボタンは1回のクリックで2つの状態を持つよりも、クリックごとに状態が変わります。それは明確ですか? :{ Swift.print( "MouseDownイベント!") }のmouseUp(theEvent:NSEvent)funcを公共上書き { Swift.print(「マウス:mouseDownイベント(NSEvent theEvent)funcを オーバーライド公共:/ – Kyz

+0

最後に、私は解決策を見つけましたUp! ") } – Kyz

答えて

1

ピアノキーにはボタンを使用しません。まず、非長方形であり、ボタンとして機能しません。シングルアクションのプッシュボタンもトグルスイッチもありません。あなたはカスタムビューでカスタムのやり方で対話しています。これは、コントロール階層が呼び出されていないことを意味します(NSButton)。代わりに、あなたはNSViewをサブクラス化し、ここに詳述のような低レベルのマウスイベントをキャプチャしている:

https://developer.apple.com/library/prerelease/content/documentation/Cocoa/Conceptual/EventOverview/HandlingMouseEvents/HandlingMouseEvents.html#//apple_ref/doc/uid/10000060i-CH6-SW1

あなたは自分のコメントに詳細あなたのように、この自分自身を見つけたが、私はあなたがより高いレベルのポイントを持っていたことを確認したかったですビューの。それも可能だし、おそらく最高、単一ビューにピアノのキーのすべてを統合し、自分自身がNSBezierPathを使用してレンダリングされたキーを聞かせcontainsPointを使用して、マウスのヒット検出を実行するために:

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSBezierPath_Class/#//apple_ref/occ/instm/NSBezierPath/containsPoint

これはロットより多くの仕事ですが、真にプロフェッショナルなピアノシミュレーションを行う唯一の方法です。次に、組み込みのボタンの形やレイアウトの制限なしに、必要なアウトライン、塗りつぶし、およびラベル付けを使用してキーをレンダリングできます。たとえば、キーの下端を少し丸めたり、光沢のあるテクスチャを適用したりすることもできます。

+0

ありがとうございました。 – Kyz

関連する問題