How to configure NSSlider to provide non-linear scale in cocoa?

How to configure NSSlider to provide non-linear scale in cocoa? ie - 0, 2, 4, 6, 10.

With the slider limited to stopping only at the marks, I want the slider to stop at 0, 2, 4, 6, 10 (and not 8, for example). Thanks.

+6
source share
1 answer

A quick written example based on an array with the required values:

SampleAppDelegate.h

#import <Cocoa/Cocoa.h> @interface SampleAppDelegate : NSObject <NSApplicationDelegate> { NSWindow * window; NSArray * values; IBOutlet NSSlider * theSlider; IBOutlet NSTextField * theLabel; } - (IBAction)sliderChanged:(id)sender; @property (assign) IBOutlet NSWindow *window; @end 

SampleAppDelegate.h

 #import "SampleAppDelegate.h" @implementation SampleAppDelegate @synthesize window; - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { values = [[NSArray alloc] initWithObjects:@"0",@"1",@"2",@"10",@"50",nil]; [theSlider setNumberOfTickMarks:[values count]]; [theSlider setMinValue:0]; [theSlider setMaxValue:[values count]-1]; [theSlider setAllowsTickMarkValuesOnly:YES]; [theLabel setStringValue:[values objectAtIndex:0]]; [theSlider setIntValue:0]; } - (IBAction)sliderChanged:(id)sender { int current = lroundf([theSlider floatValue]); [theLabel setStringValue:[values objectAtIndex:current]]; } @end 

Builder Interface:
- Add NSSlider (connect IBOutlet / connect IBAction / enable continuous update)
- Add NSTextField (connect IBOutlet)

Result:

enter image description here

+12
source

Source: https://habr.com/ru/post/886838/


All Articles