8

私のアプリケーションでは、トラックパッドでの 2 本指のジェスチャではなく、マウスからのスクロール ホイール アクションのみでスクロールを実行したいと考えています。基本的に、(void)scrollWheel:(NSEvent *)theEvent メソッド内で、scrollWheelEvent がマウスまたはトラックパッドから生成されているかどうかを判断しようとしています。これまでのところ、これを達成する簡単な方法はないようです。

-(void)beginGestureWithEvent:(NSEvent *)event; 内でブール変数を true および false に設定する回避策を試しました。-(void)endGestureWithEvent:(NSEvent *)event; しかし、 endGestureWithEvent: メソッドが呼び出された後、 scrollWheel: メソッドが数回呼び出されるため、これは解決策ではありません。

これが私のコードです:

    $BOOL fromTrackPad = NO;

    -(void)beginGestureWithEvent:(NSEvent *)event;
    {
        fromTrackPad = YES;    
    }

    -(void) endGestureWithEvent:(NSEvent *)event;
    {
        fromTrackPad = NO;    
    }

    - (void)scrollWheel:(NSEvent *)theEvent
    {
       if(!fromTrackPad)
       {
          //then do scrolling
       }
       else 
       {
         //then don't scroll
       }
    }

これが標準ではないことはわかっていますが、これが私の要件です。誰もこれを行う方法を知っていますか?? ありがとう!

4

4 に答える 4

17

-[NSEvent momentumPhase]解決策です。したがって、beginGestureイベントとendGestureイベントの間にトラックパッドから生成されたイベントはNSEventPhaseNonefor-[NSEvent phase]以外の値を返し、endGestureイベントの後に生成されたトラックパッドイベントはNSEventPhaseNonefor以外の値を返します-[NSEvent momentumPhase]。コードは以下のとおりです。

 - (void)scrollWheel:(NSEvent *)theEvent
    {
       if(([theEvent momentumPhase] != NSEventPhaseNone) || [theEvent phase] != NSEventPhaseNone))
       {
          //theEvent is from trackpad           
       }
       else 
       {
         //theEvent is from mouse
       }
    }
于 2012-12-20T22:27:58.630 に答える
8

使い分けて使えます[event hasPreciseScrollingDeltas]。OS X Lion で追加されました。ライン スクロール (マウス ホイール) とピクセル スクロール (トラックパッド、マジック マウス) のイベントを区別します。

于 2013-11-02T18:39:53.580 に答える