首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mac Cocoa:如何区分NSScrollWheel事件是来自鼠标还是触控板?

Mac Cocoa:如何区分NSScrollWheel事件是来自鼠标还是触控板?
EN

Stack Overflow用户
提问于 2012-12-11 03:17:15
回答 4查看 4.9K关注 0票数 7

在我的应用程序中,我希望滚动发生,只有通过鼠标的滚轮动作,而不是通过触控板上的两个手指手势。基本上,我正在尝试确定scrollWheelEvent是从鼠标还是触控板生成的,在- (void)scrollWheel:(NSEvent *)theEvent方法中。到目前为止,据我所知,似乎没有简单的方法来实现这一点。

我尝试过在-(void)beginGestureWithEvent:(NSEvent *)事件和-(void) endGestureWithEvent:(NSEvent *)事件内部将布尔变量设置为true和false;但这不是一个解决方案,因为在调用endGestureWithEvent:方法之后,scrollWheel:方法会被多次调用。

下面是我的代码:

代码语言:javascript
运行
复制
    $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
       }
    }

我知道这不是标准的东西,但这是我的要求。有人知道怎么做吗??谢谢!

EN

Stack Overflow用户

回答已采纳

发布于 2012-12-21 06:27:59

-[NSEvent momentumPhase]是解决方案。因此,在beginGesture和endGesture事件之间从触控板生成的事件返回的值不是NSEventPhaseNone (对于-[NSEvent phase] ),而在endGesture事件之后生成的触控板事件返回的值不是NSEventPhaseNone (对于-[NSEvent momentumPhase] )。代码如下:

代码语言:javascript
运行
复制
 - (void)scrollWheel:(NSEvent *)theEvent
    {
       if(([theEvent momentumPhase] != NSEventPhaseNone) || [theEvent phase] != NSEventPhaseNone))
       {
          //theEvent is from trackpad           
       }
       else 
       {
         //theEvent is from mouse
       }
    }
票数 17
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13807616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档