gpt4 book ai didi

objective-c - 让NSSlider以其他方式移动?

转载 作者:行者123 更新时间:2023-12-03 16:41:44 25 4
gpt4 key购买 nike

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

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

我希望得到答案。预先非常感谢您。

最佳答案

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
}

关于objective-c - 让NSSlider以其他方式移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17484247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com