我已经打了一堵墙,真的很感激一些帮助。
我有一个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];
}
答案 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