Создать пользовательский элемент управления. Вот что я делаю для своих пользовательских элементов управления:
Первый интерфейс:
@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: для обработки выбора диапазона.