2011-07-17 71 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