我试图找出如何在不拖动的情况下制作幻灯片动作。 通常当我想使用滑块更改值时,我会“左键单击滑块字段上的任意位置”,或者连续“左键单击旋钮并拖动它”。 我想要做的是将值更改为滑块上的“放置鼠标光标”的位置,而不单击或拖动,这样只有移动鼠标光标才能更改值。
我已经抬头看了NSControl,NSEvent(MouseDown)以及NSSlider,我想NSControl中的“mousedown”方法是我想以某种方式修复的方法,但是没有具体的想法如何做到这一点
我很感激答案。 非常感谢你提前。
答案 0 :(得分: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
}