Создание собственного NSSlider на основе пользовательского интерфейса QuickTime X Trim - PullRequest
4 голосов
/ 28 марта 2012

http://f.cl.ly/items/350X3c0h0A0k3s3f1R1h/Screen%20Shot%202012-03-27%20at%202.53.41%20PM.png

Я работаю над приложением, которое позволит пользователю выбирать диапазон времени для фрагмента аудио для OS X. Большую часть поиска я провел вокруг полученияпользовательский интерфейс, подобный описанному выше интерфейсу обрезки от QuickTime X, имеет , к сожалению, обнаружил многие API, связанные с iOS .

Мой первый инстинкт - это сильно настроенный NSSlider.Есть ли общее направление, в котором я должен идти, пытаясь создать это?NSSlider лучший маршрут?Будем весьма благодарны за любые указатели, советы или код.

РЕДАКТИРОВАТЬ: Был хороший комментарий о том, что это, возможно, пользовательский элемент управления.Любое руководство по этому вопросу также будет высоко оценено!

1 Ответ

1 голос
/ 04 апреля 2012

Создать пользовательский элемент управления. Вот что я делаю для своих пользовательских элементов управления:

Первый интерфейс:

@interface AS_CustomControl : NSControl <NSCoding>
{
}
@end

Тогда реализация:

@implementation AS_CustomControl

-(id)initWithFrame:(NSRect)rect
{       
    if (self = [super initWithFrame:rect])
    {
        [self initCustomControl];
    }
    return self;
}

-(id)initWithCoder:(NSCoder*)coder
{       
    if (self = [super initWithCoder:coder])
    {
        [self initCustomControl];
    }
    return self;
}

-(void)initCustomControl
{
    // put any custom initialization here
    // such as default variable state
}

-(void)dealloc
{
    [super dealloc];
}

-(void)encodeWithCoder:(NSCoder*)coder
{
    [super encodeWithCoder:coder];
}

+(Class)cellClass
{
    return [NSActionCell class];
}
@end

Метод cellClass гарантирует, что ваш пользовательский элемент управления будет запускать сообщения действий, когда пользователь взаимодействует с ним.

Тогда это просто случай рисования формы волны в drawRect: и переопределения сообщений mouseDown: mouseDragged: и mouseUp: для обработки выбора диапазона.

...