MacOS - NSSlider 音量控制功能

2018-07-24  本文已影响144人  王科伟

浅谈MacOS开发-NSSlider,它和iOS的UISlider相比,差别真的是太大了。

首先我们简单了解下 iOS UISlider 的API文档截图。看下文档说明,属性很多,还有部分没有截出来。可以说,关于UISlider的99%的设计功能均能实现。

iOS-UISlider

其次我们再来了解下 MacOS NSSlider 的API文档截图。看下文档说明。宝宝想哭😢。

MacOS-NSSlider

我们的功能是:开发类似爱奇艺的音量控制功能。看是简单的功能,浪费我3个小时。系统的NSSlider不能满足开发需求。只能自己封装了。下面是原始代码:

第一步:创建自己的封装类:RSSliderCells

.h文件:

#import@interface RSSliderCells : NSSliderCell

@end

第二部:重写drawBarInside方法:

.m文件:

#import "RSSliderCells.h"

@implementation RSSliderCells

- (void)drawBarInside:(NSRect)rect flipped:(BOOL)flipped {

    [super drawBarInside:rect flipped:flipped];

    rect.size.height = 110;

    // Bar radius

    CGFloat barRadius = 2.5;

    CGFloat value = ([self doubleValue]  - [self minValue]) / ([self maxValue] - [self minValue]);

    CGFloat finalWidth = value * ([[self controlView] frame].size.height - 4);

    NSRect leftRect = rect;

    leftRect.size.height = finalWidth;

    leftRect.origin.y = 110 -  (finalWidth);

    NSBezierPath* bg = [NSBezierPath bezierPathWithRoundedRect: rect xRadius: barRadius yRadius: barRadius];

    [NSColor.lightGrayColor setFill];

    [bg fill];

    NSBezierPath *bezierPath = [NSBezierPath bezierPathWithRoundedRect:leftRect xRadius:barRadius yRadius:barRadius];

    // 设置线的填充色

    [NSColor.greenColor setFill];

    [bezierPath fill];

}

@end

最后实现的功能截图如下:

MacOS-音量调整
上一篇下一篇

猜你喜欢

热点阅读