NSButton
カスタム描画をサブクラス化して実行します。メソッド-mouseDown
と を実装します-mouseUp
。短い(速い)クリックを実行すると、コードは完璧に機能しますが、マウスの左ボタンをしばらく押したままにすると、メソッド-mouseUp
が機能しませんでした。おそらく、ボタンの仕組みがわからない...だから、マウスを離すとボタンの外観が変わり、上に行くと前に戻るようにしたい。私は何を間違っていますか?
質問する
1073 次
1 に答える
-1
この動作が発生する理由は、Cocoa でマウスのドラッグを処理する方法が 2 つあるためです。両方についてここで説明します。
mouseDown:
NSButton は、メソッド内ですべて (マウスアップ イベントを含む) が行われる「マウス トラッキング ループ アプローチ」を使用している可能性が最も高いです。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;
}
于 2013-04-01T14:38:27.733 に答える