2013-07-05 6 views
2

드래그하지 않고 슬라이드 동작을 만드는 방법을 알아 내려고하고 있습니다. 일반적으로 슬라이더를 사용하여 값을 변경하려는 경우 "슬라이더 필드의 아무 곳이나 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합니다. co.kr/idrive/sh/sh? k = n9a5b8a8w7 –

+0

환상적인 시험 정말 고마워. 나는 똑같은 일을했지만, 클릭하지 않고는 슬라이더를 움직일 수 없습니다. 귀하의 말을 이해하십시오. "NSSlider를 NSView에 포함"은 : 입니다. 1. 라이브러리 하단에서 오른쪽 하단의 슬라이더를 선택하고 창에 넣으십시오. 2. 편집기 -> 포함 -> 사용자 정의보기 이 맞습니까? 퍼가기 및 코딩 이외의 다른 작업이 있습니까? 글쎄, 내가 생각하는 문제는, PBView (슬라이더에 임베드 됨)가 (연결 관리자에서 판단하여) 아무 것도 연결되어 있지 않다는 것입니다. 어디서/어떻게 연결할 지 말해 줄 수 있습니까? – user2549858

+0

PBView (NSView -> PBView)에 대한 사용자 정의보기 클래스 변경 –