0

我遇到了一些困难,非常感谢一些帮助。

我有一个 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];
 
}
 
4

1 回答 1

2

我想我现在可以工作了。

在我称为 TimeScrubberSlider 的 NSSlider 的子类中,以下代码似乎是我需要的(希望有人会发现这很有用):

#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
于 2011-07-28T23:53:48.470 回答