Cocoa -未调用[nsrresponder swipeWithEvent:]
我正在编写一个针对OSX Lion和SnowLeopard的应用程序。我有一个视图,我想对刷卡事件做出响应。我的理解是,如果在我的自定义视图中实现了该方法,则三个手指滑动将调用Cocoa -未调用[nsrresponder swipeWithEvent:],cocoa,osx-lion,swipe,gestures,Cocoa,Osx Lion,Swipe,Gestures,我正在编写一个针对OSX Lion和SnowLeopard的应用程序。我有一个视图,我想对刷卡事件做出响应。我的理解是,如果在我的自定义视图中实现了该方法,则三个手指滑动将调用-[NSResponder swipeWithEvent:。我已经查看了问题和相应的答案,并尝试了Oscar Del Ben代码的以下修改存根实现: @implementation TestView - (id)initWithFrame:(NSRect)frame { self = [super initWit
-[NSResponder swipeWithEvent:
。我已经查看了问题和相应的答案,并尝试了Oscar Del Ben代码的以下修改存根实现:
@implementation TestView
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect
{
[[NSColor redColor] set];
NSRectFillUsingOperation(dirtyRect, NSCompositeSourceOver);
}
- (void)swipeWithEvent:(NSEvent *)event {
NSLog(@"Swipe event detected!");
}
- (void)beginGestureWithEvent:(NSEvent *)event {
NSLog(@"Gesture detected!");
}
- (void)endGestureWithEvent:(NSEvent *)event {
NSLog(@"Gesture end detected!");
}
- (void)mouseDown:(NSEvent *)theEvent {
NSLog(@"mouseDown event detected!");
}
@end
这可以很好地编译和运行,并且视图按预期呈现。已正确注册
mouseDown:
事件。但是,不会触发任何其他事件。无论是begin/endGestureWithEvent:
方法,还是swipeWithEvent:
方法。这让我想知道:我是否需要在某个地方设置项目/应用程序设置,以正确接收和/或解释手势?提前感谢您的帮助。您的观点是否接受第一响应者
- (BOOL) acceptsFirstResponder
{
return YES;
}
不确定是不是问题,但只有按键窗口接收手势。是您的窗口键吗?要接收swipeWithEvent:消息,您必须确保三指滑动手势未映射到任何可能导致冲突的内容。转到系统首选项->轨迹板->更多手势,然后将这些首选项设置为以下选项之一:
- 在页面之间滑动:
- 用两个或三个手指滑动,或
- 用三个手指刷卡
- 在全屏应用程序之间滑动:
- 用四个手指向左或向右滑动
请参见尝试
[自我设置接受接触事件:是]代码>此处显示的是//初始化代码。
作为旁注,可以从-[NSResponder scrollWheel:///code>获取滚动手势,但我想特别使用三指手势。我假设您的意思是-(BOOL)acceptsFirstResponder
;我没有,但我只是用它试了试,结果不起作用。是的,我编辑了答案。你确定你的手指在视线上方滑动吗?是的;我实现了响应滚动手势的其他功能,它可以按预期工作,正如mouseUp:
回调一样;它是应用程序中唯一的窗口,接收滚动事件。有什么东西可能会使它不是关键的,除了我主动不设置它是关键的?非关键窗口仍然收到滚轮事件(这就是为什么你可以用两个手指拖动背景窗口。)我检查;这是钥匙。我会看看我是否可以创建一个小项目来重现这种行为(这目前正在一个中等规模的应用程序中发生);我想当有人回复时,他会给我发电子邮件。我使用BetterTouchTool,所以很可能这就是事情没有像我希望的那样工作的原因。我来看看,;同时,我认为这个答案提供了必要的信息,所以我把它标记为正确的;或者简单地覆盖acceptsTouchEvents,为您的视图返回YES。