Skip to content

Instantly share code, notes, and snippets.

@naoty
Created September 3, 2013 09:09
Show Gist options
  • Select an option

  • Save naoty/6421462 to your computer and use it in GitHub Desktop.

Select an option

Save naoty/6421462 to your computer and use it in GitHub Desktop.
#import <UIKit/UIKit.h>
@interface LevelMeterView : UIView
@property (nonatomic) NSUInteger level;
- (LevelMeterView *)initWithFrame:(CGRect)frame maxLevel:(NSUInteger)maxLevel;
@end
#import <QuartzCore/QuartzCore.h>
#import "LevelMeterView.h"
@interface LevelMeterView ()
@property (nonatomic) NSUInteger maxLevel;
@property (nonatomic) NSUInteger stepWidth;
@property (nonatomic) NSMutableArray *stepLayers;
@property (nonatomic) CGColorRef stepOnColor;
@property (nonatomic) CGColorRef stepOffColor;
@end
@implementation LevelMeterView
- (LevelMeterView *)initWithFrame:(CGRect)frame maxLevel:(NSUInteger)maxLevel
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
self.maxLevel = maxLevel;
self.stepWidth = CGRectGetWidth(frame) / self.maxLevel;
self.stepLayers = [NSMutableArray array];
self.stepOnColor = [[UIColor greenColor] CGColor];
self.stepOffColor = [[UIColor lightGrayColor] CGColor];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
return [self initWithFrame:frame maxLevel:0];
}
- (id)init
{
return [self initWithFrame:CGRectZero maxLevel:0];
}
- (void)drawRect:(CGRect)rect
{
CGFloat height = CGRectGetHeight(rect);
for (int i = 0; i < self.maxLevel; i++) {
CALayer *stepLayer = [CALayer layer];
stepLayer.frame = CGRectMake(i * self.stepWidth, 0, self.stepWidth, height);
stepLayer.borderColor = [[UIColor blackColor] CGColor];
stepLayer.borderWidth = 1.0f;
stepLayer.backgroundColor = self.stepOffColor;
[self.layer addSublayer:stepLayer];
self.stepLayers[i] = stepLayer;
}
}
- (void)setLevel:(NSUInteger)level
{
_level = level;
for (int i = 0; i < self.maxLevel; i++) {
CALayer *stepLayer = self.stepLayers[i];
stepLayer.backgroundColor = (i < self.level) ? self.stepOnColor : self.stepOffColor;
}
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment