2013-07-05 4 views
2

Я пытаюсь понять, как сделать действие слайда без перетаскивания. Обычно, когда я хочу изменить значения с помощью ползунка, я либо «левый щелчок в любом месте поля слайдера», либо непрерывно «левый щелчок по ручке и перетаскивание». То, что я хотел бы сделать, - это изменить значения до тех пор, пока «курсор мыши не будет помещен» на ползунок, не нажимая и не перетаскивая его, так что только перемещение курсора мыши позволяет мне изменять значения.Пусть NSSlider движется другими способами?

Я искал и копал до NSControl, NSEvent (MouseDown), а также NSSlider, и я думаю, что метод «mousedown» в NSControl - это тот, который я хочу как-то исправить, но не знаю, как это сделать что.

Буду признателен за ответы. Спасибо вам большое заблаговременно.

ответ

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

Здесь общая связь по протоколу HTTPS проекта: //www.idrive. com/idrive/sh/sh? k = n9a5b8a8w7 –

+0

Фантастический экзамен привет, спасибо. Я сделал точно то же самое, однако, я не могу перемещать ползунок, не щелкая. Позвольте мне понять, ваше высказывание «Вставить ваш NSSlider в NSView» есть: 1. Выберите любой слайдер из библиотеки внизу справа и поместите его в окно 2. Выберите «Редактор» -> «Вставить в -> Пользовательский вид правильный? Есть ли что-нибудь особенное, что мне нужно делать, кроме как встраивания и кодирования? Ну, я думаю, проблема в том, что мой PBView (встроенный в слайдер) не связан ни с чем (судя по инспектору подключения), хотя ваш. Не могли бы вы рассказать мне, где/как его подключить? – user2549858

+0

Изменение класса пользовательского вида на PBView (NSView -> PBView) –

Смежные вопросы