1

NSButtonカスタム描画をサブクラス化して実行します。メソッド-mouseDownと を実装します-mouseUp。短い(速い)クリックを実行すると、コードは完璧に機能しますが、マウスの左ボタンをしばらく押したままにすると、メソッド-mouseUpが機能しませんでした。おそらく、ボタンの仕組みがわからない...だから、マウスを離すとボタンの外観が変わり、上に行くと前に戻るようにしたい。私は何を間違っていますか?

4

1 に答える 1

-1

この動作が発生する理由は、Cocoa でマウスのドラッグを処理する方法が 2 つあるためです。両方についてここで説明します。

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

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 に答える