プログラミング > 全般 - Mac >

再生スライダー

iPodとかQuickTimePlayerのような、再生する位置を表示・変更できるようなスライダーを使いたいと思って、NSSliderにジャカジャカ位置を送っていたら、うまいことクリックして変更できなくて、あれこれ調べたらNSSliderからNSSliderCellを取得してmouseDownFlagsってのをチェックすれば良い事が分かりました。

そこらへんを検証してみたコードが以下のような感じです。タイマーはNSEventTrackingRunLoopModeでスライダーを変更中も関係なく動かしていますが、マウスで操作中のときは値を送らないようにしています。

#import <Cocoa/Cocoa.h>

@interface Controller : NSObject {

    IBOutlet NSSlider *slider;
    float sliderValue;
}

- (IBAction)setValue:(id)sender;

@end

@implementation Controller

- (void)awakeFromNib
{
    [slider setMinValue:0];
    [slider setMaxValue:100];
    [slider setContinuous:NO];

    NSTimer *timer =
[NSTimer scheduledTimerWithTimeInterval:0.05
                                         target:self
                                       selector:@selector(sendSliderValue)
                                     userInfo:nil
                                        repeats:YES];

    [[NSRunLoop currentRunLoop] addTimer:timer
forMode:NSEventTrackingRunLoopMode];
}

- (void)sendSliderValue
{
    NSSliderCell *cell = [slider cell];

    if (![cell mouseDownFlags]) {

        sliderValue++;

        if (sliderValue > 100) {
            sliderValue = 0;
        }

        [slider setFloatValue:sliderValue];
    }
}

- (IBAction)setValue:(id)sender
{
    sliderValue = [sender floatValue];
}

@end

トラックバック(0)

このブログ記事を参照しているブログ一覧: 再生スライダー

このブログ記事に対するトラックバックURL: http://objective-audio.jp/oa80/mt-tb.cgi/50

コメントする


画像の中に見える文字を入力してください。