6

ココアで非線形スケールを提供するためにNSSliderをカスタマイズするにはどうすればよいですか? すなわち - 0、2、4、6、10。

スライダーが目盛りのみで停止するように制限されているため、スライダーを 0、2、4、6、10 (たとえば 8 ではなく) で停止させたいと考えています。ありがとう。

4

1 に答える 1

12

目的の値を持つ配列に基づいて簡単に記述された例:

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

Interface Builder:
- NSSlider を追加 (IBOutlet に接続 / IBAction に接続 / 継続的な更新を有効化)
- NSTextField を追加 (IBOutlet に接続)

結果:

ここに画像の説明を入力

于 2011-04-27T22:03:41.423 に答える