2

我想弄清楚如何在不拖动的情况下进行滑动动作。通常,当我想使用滑块更改值时,我会执行“左键单击滑块字段上的任意位置”或连续“左键单击旋钮并拖动它”。我想做的是在不单击或拖动的情况下将值更改为滑块上“放置鼠标光标”的任何位置,这样只有移动鼠标光标才能更改值。

我已经查找并一直在深入研究 NSControl、NSEvent(MouseDown) 以及 NSslider,我猜 NSControl 中的“mousedown”方法是我想以某种方式修复的方法,但不知道如何做到这一点。

我会很感激答案。非常感谢您提前。

4

1 回答 1

1

将你 嵌入NSSlider.NSView

在此处输入图像描述

子类 NSView 并捕获鼠标移动事件

@interface PBView : NSView {
    id delegate;
}

@property (assign)id delegate;
@end

@implementation PBView
@synthesize delegate;

-(void) mouseMoved: (NSEvent *) thisEvent
{
    NSPoint cursorPoint = [ thisEvent locationInWindow ];
    [delegate sliderValueChanged];
}
- (void)createTrackingArea
{
    NSTrackingAreaOptions focusTrackingAreaOptions = NSTrackingMouseMoved;
    focusTrackingAreaOptions |= NSTrackingActiveInActiveApp;
    focusTrackingAreaOptions |= NSTrackingMouseEnteredAndExited;
    focusTrackingAreaOptions |= NSTrackingAssumeInside;
    focusTrackingAreaOptions |= NSTrackingInVisibleRect;

    NSTrackingArea *focusTrackingArea = [[NSTrackingArea alloc] initWithRect:NSZeroRect
                                                                     options:focusTrackingAreaOptions owner:self userInfo:nil];
    [self addTrackingArea:focusTrackingArea];
}


- (void)awakeFromNib
{
    [self createTrackingArea];
}
@end

在此处输入图像描述

现在实施

-(void)sliderValueChanged
{
    NSPoint mouseLoc;
    mouseLoc = [NSEvent mouseLocation]; // mouse location

    NSRect r= [window frame];// window location
    NSLog(@"%@", NSStringFromPoint(r.origin));

    NSLog(@"%@",    NSStringFromPoint(mouseLoc));
    [silder setIntValue:(mouseLoc.x -r.origin.x)];//silder is object of NSSlider
}
于 2013-07-05T14:22:52.450 回答