Событие 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];
 
}
 

person adamteale    schedule 17.07.2011    source источник


Ответы (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
person adamteale    schedule 28.07.2011