событие mouseDown на NSSlider - PullRequest
0 голосов
/ 17 июля 2011

Я врезался в стену и был бы очень признателен за помощь.

У меня есть NSSlider, который я использую для управления скоростью перемещения QTMovie.

Я хочу, чтобы скорость воспроизведения видео соответствовала значению слайдера. Это легко сделать.

Проблема в том, что я хочу, чтобы NSSlider сбрасывался до '0', когда событие пользователя "mouseUp" завершено. Я не могу заставить это событие работать, поэтому я создал подкласс NSSlider и реализовал методы mousedown & mouseup, добавил делегата в подкласс NSSlider и подключил его к контроллеру моего приложения.

Это вроде работает, но на слайдере огромная задержка - он скользит нормально, но скорость видео не меняется, а меняется только когда я 'mouseUp' - в основном кажется, что mouseDown вызывается на MouseUp .

Надеюсь, кое-что из этого имеет смысл.

Надеюсь, кто-то может мне помочь,

Приветствия

Адам

enter code here

Файл моего подкласса NSSlider .m:

@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 Ответ

2 голосов
/ 29 июля 2011

Я думаю, что теперь он работает.

В подклассе 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
...