2011-07-17 97 views
0

我打了一下墙,真的很感谢一些帮助。NSSlider上的mouseDown事件

我有一个NSSlider,我用它来控制QTMovie的慢跑速度。

我希望根据滑块值回放视频的速率。这很容易做到。

问题是我想让NSSlider在用户的事件“mouseUp”完成时重置为'0'。 我似乎无法得到此事件的工作,所以我已经划分了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]; 
  
} 
  

回答

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