Я хочу обнаружить жестов прокрутки (два пальца на трекпаде). Как мне это сделать?
Mac cocoa - как я могу определить жесты прокрутки трекпада?
Ответ 1
Вы должны сделать это, реализовав методы touch event NSView
в вашем пользовательском подклассе.
Эти методы:
- (void)touchesBeganWithEvent:(NSEvent *)event;
- (void)touchesMovedWithEvent:(NSEvent *)event;
- (void)touchesEndedWithEvent:(NSEvent *)event;
- (void)touchesCancelledWithEvent:(NSEvent *)event;
Объект NSEvent
, входящий в качестве параметра, содержит информацию о затронутых касаниях. В частности, вы можете получить их, используя:
-(NSSet *)touchesMatchingPhase:(NSTouchPhase)phase inView:(NSView *)view;
Кроме того, в подклассе пользовательского вида вы должны сначала установить его следующим образом:
[self setAcceptsTouchEvents:YES];
чтобы получить такие события.
Ответ 2
Похоже, вы хотите переопределить метод просмотра scrollWheel:
. Вы можете использовать методы NSEvent
deltaX
и deltaY
, чтобы узнать, сколько прокрутила пользователь.
код:
@implementation MyView
- (void)scrollWheel:(NSEvent *)theEvent {
NSLog(@"user scrolled %f horizontally and %f vertically", [theEvent deltaX], [theEvent deltaY]);
}
@end
Вы также можете взглянуть на "Руководство по отслеживанию событий трекпада" . Это покажет вам, как захватывать собственные жесты, в дополнение к стандартным.
Ответ 3
Чтобы обнаружить событие scrollWheel, используйте - (void) scrollWheel: (NSEvent *) методEvent.
- (void)scrollWheel:(NSEvent *)theEvent
{
//implement what you want
}
Вышеуказанный метод будет вызываться, когда вы прокручиваете с помощью колеса прокрутки с помощью мыши или жестов двух пальцев с трекпада.
Если ваш вопрос заключается в том, чтобы определить, генерируется ли событие scrollWheel с помощью мыши или трекпада, то, согласно документации Apple, это невозможно. Хотя здесь есть работа,
- (void)scrollWheel:(NSEvent *)theEvent
{
if([theEvent phase])
{
// theEvent is generated by trackpad
}
else
{
// theEvent is generated by mouse
}
}
Вы также можете использовать -(void)beginGestureWithEvent:(NSEvent *)event;
и -(void)endGestureWithEvent:(NSEvent *)event
. Эти методы вызывают до и после -(void)scrollWheel:(NSEvent *)theEvent
соответственно.
Есть случай, когда это не сработает - если вы будете использовать жест 2 пальцев быстрее и выньте пальцы из трекпада довольно быстро, тогда у вас могут быть проблемы здесь - (Память не будет выпущена)