NSSlider上的mouseDown事件

时间:2011-07-17 13:30:08

标签: objective-c delegates nsslider mousedown mouseup

我已经打了一堵墙,真的很感激一些帮助。

我有一个NSSlider用于控制QTMovie的慢速。

我想根据滑块值播放视频的速率。这很容易做到。

问题在于,当用户的事件“mouseUp”完成时,我希望NSSlider重置为“0”。 我似乎无法让这个事件发挥作用,所以我已经将NSSlider子类化并实现了mousedown& mouseup方法,并将一个委托添加到NSSlider子类并将其连接到我的应用程序的控制器。

它有点工作,但滑块有一个很大的延迟 - 它滑动很好,但视频速率不会改变,只有当我'mouseUp'时 - 基本上似乎在MouseUp上调用了mouseDown

我希望其中一些是有道理的。

希望有人可以帮助我,

干杯,

亚当

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 个答案:

答案 0 :(得分:2)

我想我现在正在努力。

在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