Событие 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
Другие вопросы по тегам