ios CCRectangleBlock.m

objectivec 复制代码
//
//  RectangleBlock.h
//  PhoneManager
//
//


#import <UIKit/UIKit.h>




@interface CCRectangleBlock : UIView {
    NSUInteger blocksNumber;
    NSArray *blocksPercentage;
    NSArray *blocksColor;
}
@property(nonatomic, retain) NSArray *blocksPercentage;
@property(nonatomic, retain) NSArray *blocksColor;


- (void)setBlocksAndColors:(NSUInteger)number blocks:(NSArray*)percentage colors:(NSArray*)color;


@end




@interface Battery : UIView{
@private
    CCRectangleBlock *level;
    UIView *head;
    
    UILabel *percentage;
}
@property(nonatomic, retain) CCRectangleBlock *level;
@property(nonatomic, retain) UIView *head;
@property(nonatomic, retain) UILabel *percentage;


@end
objectivec 复制代码
//
//  RectangleBlock.m
//  PhoneManager
//


#import "CCRectangleBlock.h"
#import "CCSystem.h"




@implementation CCRectangleBlock
@synthesize blocksPercentage, blocksColor;


- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
//        self.backgroundColor = [UIColor redColor];
    }
    return self;
}


- (void)setBlocksAndColors:(NSUInteger)number blocks:(NSArray*)percentage colors:(NSArray*)color
{
    NSAssert(number == [percentage count] && number == [color count], @"error");
    blocksNumber = number;
    self.blocksPercentage = percentage;
    self.blocksColor = color;
}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 200, 200, 100, 0.5);
//    self.backgroundColor = [UIColor grayColor];
//    NSLog(@"frame: %@, bounds: %@", NSStringFromCGRect([self frame]), NSStringFromCGRect([self bounds]));
//    CGContextFillRect(context, CGRectOffset([self frame], -20, -10));
    CGContextFillRect(context, [self bounds]);
    CGFloat totalWidth = self.frame.size.width;
    CGFloat totalHeight = self.frame.size.height;
    CGFloat startPoint = 0;
    for (NSUInteger i = 0; i != blocksNumber; ++i) {
        UIColor *color = [blocksColor objectAtIndex:i];
        const CGFloat *colorComponents = CGColorGetComponents([color CGColor]);
        CGFloat blockWidth = totalWidth * [[blocksPercentage objectAtIndex:i] floatValue];
        CGContextSetRGBFillColor(context, colorComponents[0], colorComponents[1], colorComponents [2], colorComponents[3]);
        CGContextFillRect(context, CGRectMake(startPoint, 0, blockWidth, totalHeight));
        startPoint += blockWidth;
    }
    CGContextSetStrokeColorWithColor(context, [[UIColor blueColor] CGColor]);
    CGContextStrokeRect(context, [self bounds]);
//    CGContextStrokeRect(context, CGRectOffset([self frame], -20, -10));
//    CGContextStrokePath(context);
}




- (void)dealloc
{
    [blocksColor release];
    [blocksPercentage release];
    [super dealloc];
}


@end


@implementation Battery
@synthesize level;
@synthesize head;
@synthesize percentage;
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.backgroundColor = [UIColor clearColor];
        level = [[CCRectangleBlock alloc] initWithFrame:CGRectMake(0, 0, frame.size.width * 0.95, frame.size.height)];
        head = [[UIView alloc] initWithFrame:CGRectMake(frame.size.width * 0.95 + 1, frame.size.height * 0.35, frame.size.width * 0.05 - 1, frame.size.height * 0.3)];
        self.level.backgroundColor = [UIColor grayColor];
        self.head.backgroundColor = [UIColor grayColor];
        float volume = getBatteryLevel();
        [level setBlocksAndColors:1 blocks:[NSArray arrayWithObjects:[NSNumber numberWithFloat:volume], nil] colors:[NSArray arrayWithObjects:[UIColor greenColor], nil]];
        NSLog(@"battery monitoring enabled: %d, volume is: %f", [[UIDevice currentDevice]isBatteryMonitoringEnabled], volume);
        
        volume = getBatteryLevel();
        
        percentage = [[UILabel alloc] initWithFrame:CGRectZero];
        percentage.center = [self center];
        percentage.frame = CGRectMake(self.bounds.size.width / 4, 10, self.bounds.size.width / 2, self.bounds.size.height - 20);
//        percentage.opaque = NO;
        percentage.textAlignment = UITextAlignmentCenter;
        percentage.backgroundColor = [UIColor clearColor];
        percentage.text = [NSString stringWithFormat:@"%d%%", [[NSNumber numberWithFloat:100 * volume] intValue]];
        [self addSubview:level];
        [self addSubview:head];
        [self insertSubview:percentage atIndex:1];
        
        [level release];
        [head release];
        [percentage release];
        
    }
    return self;
}


- (void)drawRect:(CGRect)rect
{
    
    
//    [level drawRect:rect];
}
//- (void)batteryLevelDidChange:(NSNotification*) notification
//{
//    float volume = getBatteryLevel();
//    [level setBlocksAndColors:1 blocks:[NSArray arrayWithObjects:[NSNumber numberWithFloat:volume], nil] colors:[NSArray arrayWithObjects:[UIColor greenColor], nil]];
//    NSLog(@"battery monitoring enabled: %d, volume is: %f", [[UIDevice currentDevice]isBatteryMonitoringEnabled], volume);
//    percentage.text = [NSString stringWithFormat:@"%d%%", [[NSNumber numberWithFloat:volume] intValue]];
//    [self setNeedsDisplay];
//}


- (void)dealloc
{
    [level release];
    [head release];
    [super dealloc];
}


@end

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

相关推荐
传奇开心果编程9 小时前
【Flutter踩坑排雷】第7课:巨型 build 函数坑|全部 UI 写在同一个 build,维护难、隐性异常
android·flutter·ios·移动开发·跨平台·dart·声明式ui
瓦瓦gogo13 小时前
第一次了解 iOS 开发:从 Swift、SwiftUI 到公共组件
ios·swiftui·swift
Liben17 小时前
Weex开发踩坑记录
android·前端·ios
season_zhu19 小时前
Skills For Real Engineers 系列之三:需求聊清楚了,怎么一步步走主流程,做到交付?
ios·ai编程
茶底世界之下20 小时前
窗边花瓶太暗?用 Awaking 看提亮室内的代价
ios
2501_9159090620 小时前
Windows 上用 VS Code 调试 iPhone 真机 App,KXBuild 断点、崩溃定位实操
ide·windows·vscode·ios·iphone·个人开发·敏捷流程
2501_916007471 天前
抓包工具功能对比,TraceEagle、Charles、Fiddler、Wireshark、mitmproxy 差别
前端·网络协议·ios·adb·https·fiddler·wireshark
2501_915106322 天前
Windows 上开发 Unity iOS,使用 KXBuild 进行真机调试、性能采样与打包 ipa
windows·vscode·unity·ios·个人开发·swift·敏捷流程
柚鸥ASO优化2 天前
iOS 27.2 更新后,App Store 广告展示逻辑出现新变化
ios
美狐美颜SDK开放平台2 天前
视频美颜SDK如何应对快速转头与大幅度面部动作?
android·人工智能·ios·音视频·直播美颜sdk·视频美颜sdk