Событие mouseDown на NSSlider
Я ударил немного стены и был бы очень признателен за помощь.
У меня есть NSSlider, который я использую для управления скоростью бега QTMovie.
Я хочу, чтобы скорость воспроизведения видео соответствовала значению слайдера. Это легко сделать.
Проблема в том, что я хочу, чтобы NSSlider сбрасывался на "0", когда пользовательское событие "mouseUp" завершено. Я не могу заставить это событие работать, поэтому я создал подкласс NSSlider и реализовал методы mousedown & mouseup, добавил делегата в подкласс NSSlider и подключил его к контроллеру моего приложения.
Это вроде работает, но на слайдере есть огромная задержка - он скользит нормально, но скорость видео не меняется, а меняется только когда я 'mouseUp' - в основном кажется, что mouseDown вызывается на MouseUp.
Я надеюсь, что кое-что из этого имеет смысл.
Надеюсь, кто-то может мне помочь,
Ура,
Адам
enter code here
мой файл.m подкласса NSSlider:
@implementation TimeScrubberSlider
@synthesize delegate;
- (void)mouseDown:(NSEvent *)theEvent {
// dispatch_queue_t myQueue = dispatch_queue_create("com.mycompany.myqueue", 0);
// dispatch_async(myQueue, ^{
NSLog(@"mouseDown");
[super mouseDown:theEvent];
if ([delegate respondsToSelector: @selector(doScrubTime:)])
{
[delegate doScrubTime:nil];
}
[super mouseDown:theEvent];
// );
// dispatch_release(myQueue);
}
- (void) mouseUp: (NSEvent*) theEvent
{
NSLog(@"mouseUp TimeScrubber");
[super mouseUp:theEvent];
[self setDoubleValue:0];
if ([delegate respondsToSelector: @selector(doScrubTime:)])
{
[delegate doScrubTime:nil];
}
[super mouseUp:theEvent];
}
1 ответ
Я думаю, у меня это работает сейчас.
В подклассе NSSlider, который я назвал TimeScrubberSlider, следующий код кажется мне тем, что мне нужно (надеюсь, кто-то найдет это полезным):
#import "TimeScrubberSlider.h"
#import "Controller.h"
@implementation TimeScrubberSlider
@synthesize delegate;
- (void)mouseDown:(NSEvent *)theEvent {
[delegate doScrubTime:nil];
[super mouseDown:theEvent];
[self mouseUp:theEvent];
}
- (void) mouseUp: (NSEvent*) theEvent
{
[self setIntValue:0];
[delegate doPlay:nil];
}
@end