2013-07-05 34 views
2

我想弄清楚如何在不拖動的情況下製作幻燈片操作。 通常,當我想要使用滑塊更改值時,我會執行「leftClick滑塊字段上的任意位置」或連續「leftClick旋鈕並將其拖動」。 我想要做的是無需點擊或拖動就可以將值更改爲滑塊上的任何位置,以便只有移動鼠標光標才能更改值。讓NSSlider以其他方式移動?

我已經擡頭,一直在挖掘NSControl,NSEvent(MouseDown)以及NSSlider,我猜NSControl中的「mousedown」方法是我想解決的方法,但沒有具體的想法如何做那。

我將不勝感激的答案。 非常感謝您提前。

回答

1

將您嵌入NSSliderNSView

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 
} 
+0

這裏是共享項目的HTTPS鏈接://www.idrive。 com/idrive/sh/sh?k = n9a5b8a8w7 –

+0

夢幻般的考試謝謝,非常感謝。 我做了完全一樣的事情,但是,我不能移動滑塊而不點擊。 讓我明白,您的意思 「將您的NSSlider嵌入到NSView中」爲: 1.從庫右下角選擇任意滑塊並將其放在窗口上 2.選擇編輯器 - >嵌入 - >自定義視圖 正確嗎? 除嵌入和編碼之外,還有什麼特別的事情需要我去做嗎? 那麼我認爲這個問題是我的PBView(嵌入滑塊)沒有連接任何東西(從連接檢查器判斷),雖然你的是。你能告訴我在哪裏/如何連接它? – user2549858

+0

將自定義視圖類更改爲PBView(NSView - > PBView) –