让NSSlider以其他方式移动?

时间:2013-07-05 08:19:21

标签: objective-c macos cocoa nsslider nscontrol

我试图找出如何在不拖动的情况下制作幻灯片动作。 通常当我想使用滑块更改值时,我会“左键单击滑块字段上的任意位置”,或者连续“左键单击旋钮并拖动它”。 我想要做的是将值更改为滑块上的“放置鼠标光标”的位置,而不单击或拖动,这样只有移动鼠标光标才能更改值。

我已经抬头看了NSControl,NSEvent(MouseDown)以及NSSlider,我想NSControl中的“mousedown”方法是我想以某种方式修复的方法,但是没有具体的想法如何做到这一点

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

1 个答案:

答案 0 :(得分:1)

NSSlider嵌入NSView

enter image description here

子类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

enter image description here

现在实施

-(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
}