小说绘上架版本
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
//
|
||||
// DPBatteryView.h
|
||||
// WXReader
|
||||
//
|
||||
// Created by Andrew on 2018/6/10.
|
||||
// Copyright © 2018年 Andrew. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface WXYZ_BatteryView : UIView
|
||||
|
||||
@property (nonatomic, strong) UIColor *batteryTintColor;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,216 @@
|
||||
//
|
||||
// DPBatteryView.m
|
||||
// WXReader
|
||||
//
|
||||
// Created by Andrew on 2018/6/10.
|
||||
// Copyright © 2018年 Andrew. All rights reserved.
|
||||
//
|
||||
|
||||
#import "WXYZ_BatteryView.h"
|
||||
|
||||
typedef enum : NSUInteger {
|
||||
WXBatteryStateColorNormal,
|
||||
WXBatteryStateColorCharging,
|
||||
WXBatteryStateColorWarning,
|
||||
} WXBatteryStateColor;
|
||||
|
||||
@interface WXYZ_BatteryView ()
|
||||
{
|
||||
UIView *batteryView;
|
||||
UILabel *batteryLabel;
|
||||
CAShapeLayer *batteryLayer;
|
||||
CAShapeLayer *layer2;
|
||||
|
||||
CGFloat w;
|
||||
CGFloat lineW;
|
||||
NSTimer *time;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation WXYZ_BatteryView
|
||||
|
||||
- (instancetype)initWithFrame:(CGRect)frame
|
||||
{
|
||||
if (self = [super initWithFrame:frame]) {
|
||||
[self initialize];
|
||||
[self createSubViews];
|
||||
[self batteryLevelChanged];
|
||||
[self updateTime];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)initialize
|
||||
{
|
||||
UIDevice *device = [UIDevice currentDevice];
|
||||
device.batteryMonitoringEnabled = YES;
|
||||
|
||||
WS(weakSelf)
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
addObserverForName:UIDeviceBatteryLevelDidChangeNotification
|
||||
object:nil queue:[NSOperationQueue mainQueue]
|
||||
usingBlock:^(NSNotification *notification) {
|
||||
[weakSelf batteryLevelChanged];
|
||||
}];
|
||||
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
addObserverForName:UIDeviceBatteryStateDidChangeNotification
|
||||
object:nil queue:[NSOperationQueue mainQueue]
|
||||
usingBlock:^(NSNotification *notification) {
|
||||
[weakSelf batteryStateChanged];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)createSubViews
|
||||
{
|
||||
//电池的宽度
|
||||
w = 25;
|
||||
//电池的x的坐标
|
||||
CGFloat x = 0;
|
||||
//电池的y的坐标
|
||||
CGFloat y = self.height / 2 - 5;
|
||||
//电池的线宽
|
||||
lineW = 1;
|
||||
//电池的高度
|
||||
CGFloat h = 10;
|
||||
|
||||
//画电池
|
||||
UIBezierPath *path1 = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(x, y, w, h) cornerRadius:2];
|
||||
batteryLayer = [CAShapeLayer layer];
|
||||
batteryLayer.lineWidth = lineW;
|
||||
batteryLayer.strokeColor = [UIColor grayColor].CGColor;
|
||||
batteryLayer.fillColor = [UIColor clearColor].CGColor;
|
||||
batteryLayer.path = [path1 CGPath];
|
||||
[self.layer addSublayer:batteryLayer];
|
||||
|
||||
UIBezierPath *path2 = [UIBezierPath bezierPath];
|
||||
[path2 moveToPoint:CGPointMake(x+w+1, y+h/3)];
|
||||
[path2 addLineToPoint:CGPointMake(x+w+1, y+h*2/3)];
|
||||
layer2 = [CAShapeLayer layer];
|
||||
layer2.lineWidth = 2;
|
||||
layer2.strokeColor = [UIColor grayColor].CGColor;
|
||||
layer2.fillColor = [UIColor clearColor].CGColor;
|
||||
layer2.path = [path2 CGPath];
|
||||
[self.layer addSublayer:layer2];
|
||||
|
||||
//绘制进度
|
||||
batteryView = [[UIView alloc] initWithFrame:CGRectMake(x + 1,y + lineW, 0, h - lineW * 2)];
|
||||
batteryView.layer.cornerRadius = 1;
|
||||
[self addSubview:batteryView];
|
||||
|
||||
batteryLabel = [[UILabel alloc] initWithFrame:CGRectMake(x + w + 5, y, 80, h)];
|
||||
batteryLabel.textColor = [UIColor grayColor];
|
||||
batteryLabel.textAlignment = NSTextAlignmentLeft;
|
||||
batteryLabel.font = kFont10;
|
||||
[self addSubview:batteryLabel];
|
||||
|
||||
time = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateTime) userInfo:nil repeats:YES];
|
||||
}
|
||||
|
||||
- (void)updateTime
|
||||
{
|
||||
//获取当前时间
|
||||
NSDate *now = [NSDate date];
|
||||
|
||||
NSCalendar *calendar = [NSCalendar currentCalendar];
|
||||
NSCalendarUnit unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
|
||||
NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:now];
|
||||
|
||||
NSInteger hour = [dateComponent hour];
|
||||
NSInteger minute = [dateComponent minute];
|
||||
|
||||
if (hour < 10 && minute < 10) {
|
||||
batteryLabel.text = [NSString stringWithFormat:@"0%d:0%d",(int)hour, (int)minute];
|
||||
} else if (hour < 10) {
|
||||
batteryLabel.text = [NSString stringWithFormat:@"0%d:%d",(int)hour, (int)minute];
|
||||
} else if (minute < 10) {
|
||||
batteryLabel.text = [NSString stringWithFormat:@"%d:0%d",(int)hour, (int)minute];
|
||||
} else {
|
||||
batteryLabel.text = [NSString stringWithFormat:@"%d:%d",(int)hour, (int)minute];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 电池剩余比例
|
||||
- (void)batteryLevelChanged
|
||||
{
|
||||
UIDevice *device = [UIDevice currentDevice];
|
||||
device.batteryMonitoringEnabled = YES;
|
||||
|
||||
float batteryLevel = [device batteryLevel] * 100;
|
||||
|
||||
if (batteryLevel < 0) {
|
||||
batteryLevel = 0;
|
||||
} else if (batteryLevel > 100){
|
||||
batteryLevel = 100;
|
||||
}
|
||||
|
||||
if (batteryLevel <= 10) {
|
||||
[self changeBatteryState:WXBatteryStateColorWarning];
|
||||
} else {
|
||||
[self changeBatteryState:WXBatteryStateColorNormal];
|
||||
}
|
||||
|
||||
CGRect frame = batteryView.frame;
|
||||
frame.size.width = (batteryLevel * (w - lineW * 2)) / 100;
|
||||
batteryView.frame = frame;
|
||||
}
|
||||
|
||||
- (void)batteryStateChanged
|
||||
{
|
||||
switch ([[UIDevice currentDevice] batteryState]) {
|
||||
case 0: // 未开启监视电池状态
|
||||
[self changeBatteryState:WXBatteryStateColorNormal];
|
||||
break;
|
||||
case 1: // 电池未充电状态
|
||||
[self changeBatteryState:WXBatteryStateColorNormal];
|
||||
break;
|
||||
case 2: // 电池充电状态
|
||||
[self changeBatteryState:WXBatteryStateColorCharging];
|
||||
break;
|
||||
case 3: // 电池充电完成
|
||||
[self changeBatteryState:WXBatteryStateColorCharging];
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)changeBatteryState:(WXBatteryStateColor)batteryState
|
||||
{
|
||||
switch (batteryState) {
|
||||
case WXBatteryStateColorNormal:
|
||||
batteryView.backgroundColor = kColorRGBA(131, 131, 131, 1);
|
||||
break;
|
||||
case WXBatteryStateColorCharging:
|
||||
batteryView.backgroundColor = kColorRGBA(75, 216, 102, 1);
|
||||
break;
|
||||
case WXBatteryStateColorWarning:
|
||||
batteryView.backgroundColor = kColorRGBA(252, 62, 46, 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setBatteryTintColor:(UIColor *)batteryTintColor
|
||||
{
|
||||
batteryLayer.strokeColor = batteryTintColor.CGColor;
|
||||
layer2.strokeColor = batteryTintColor.CGColor;
|
||||
batteryLabel.textColor = batteryTintColor;
|
||||
|
||||
if ([UIDevice currentDevice].batteryState == UIDeviceBatteryStateCharging || [UIDevice currentDevice].batteryState == UIDeviceBatteryStateFull) {
|
||||
[self changeBatteryState:WXBatteryStateColorCharging];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[time invalidate];
|
||||
time = nil;
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user