#import <UIKit/UIKit.h>
@interface BaseProgressBar : UIView
{
float preValue;
float minValue;
float maxValue;
float currentValue;
float vx;
}
@property (nonatomic, retain)UIImageView * bgImageView;
@property (nonatomic, retain)UIImageView * imageView;
@property (nonatomic, retain)NSTimer * timer;
@property (nonatomic, readwrite) float currentValue;
@property (nonatomic, readwrite) float maxValue;
@property (nonatomic, assign)BOOL isAnimation;
- (id)initWithFrame:(CGRect)frame imageName:(NSArray *)array;
@property (nonatomic,assign) id delegate;
@end
@protocol BaseProgressBarDelegate
-(void)progressEnd;
@end
#import "BaseProgressBar.h"
#import "DrawAndAnimation.h"
#import "ImageManager.h"
#import "GameConst.h"
//设置圆角需要倒的包
#import <QuartzCore/QuartzCore.h>
@implementation BaseProgressBar
@synthesize timer;
@synthesize maxValue;
@synthesize currentValue;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.backgroundColor = [UIColor clearColor];
//设置圆角代码
[self.layer setMasksToBounds:YES];
[self.layer setBorderWidth:1.0];
minValue = 0.0f;
maxValue = 1.0f;
currentValue = 0.0f;
preValue = currentValue;
}
return self;
}
- (id)initWithFrame:(CGRect)frame imageName:(NSArray *)array
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.backgroundColor = [UIColor clearColor];
self.isAnimation =YES;
_bgImageView = [[UIImageView alloc] initWithImage:[[ImageManager sharedImageManager] imageNamed:@"frame_loading.png"]];
[_bgImageView setFrame:CGRectMake(0 ,0, self.frame.size.width + 9*Content_Size ,1.1 * self.frame.size.height)];
_bgImageView.center =CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
[self addSubview:_bgImageView];
// [_bgImageView setContentStretch:CGRectMake(0.4, 0.4,0.2,0.2)];
[_bgImageView release];
NSMutableArray *imageArr = [[NSMutableArray alloc] init];
for (NSString * keyStr in array)
{
UIImage *image = [[ImageManager sharedImageManager] imageNamed:[NSString stringWithFormat:@"%@.png",keyStr]];
[imageArr addObject:image];
}
_imageView = [[UIImageView alloc] initWithFrame: CGRectMake(0 ,-self.frame.size.height/2, 2 * self.frame.size.height, 2 * self.frame.size.height)];
[_imageView setAnimationDuration:0.4];
[_imageView setAnimationImages:imageArr];
[imageArr release];
[self addSubview:_imageView];
[_imageView release];
[_imageView startAnimating];
minValue = 0.0f;
maxValue = 1.0f;
currentValue = 0.0f;
preValue = currentValue;
}
return self;
}
-(void)setCurrentValue:(float)newValue
{
if (newValue>=self.maxValue)
{
currentValue = maxValue;
}
else
{
currentValue = newValue;
}
if (preValue == 0 && currentValue==self.maxValue)
{
preValue = currentValue;
return;
}
if (self.isAnimation)
{
vx = (currentValue - preValue)/50;
if (vx < 0)
{
vx = vx * (-1);
}
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(runadd) userInfo:nil repeats:YES];
}
else
{
preValue = currentValue;
return;
}
}
-(void)setMaxValue:(float)newValue
{
if (currentValue>maxValue) {
currentValue = maxValue;
}else{
maxValue = newValue;
[self setNeedsDisplay];
}
}
-(void)runadd
{
CGPoint point = self.imageView.center ;
preValue = preValue + vx;
if (preValue >= currentValue)
{
preValue = currentValue;
}
[self setNeedsDisplay];
if (preValue == currentValue)
{
[self.timer invalidate];
self.timer = nil;
if(_delegate&&[_delegate respondsToSelector:@selector(progressEnd)])
{
[_delegate progressEnd];
_delegate = nil;
}
}
CGFloat percent = (preValue/maxValue) * self.frame.size.width;
self.imageView.center =CGPointMake(percent,point.y);
}
- (void)dealloc
{
if (self.timer != nil)
{
[self.timer invalidate];
self.timer = nil;
}
[super dealloc];
}
- (void)drawRect:(CGRect)rect
{
// Drawing code
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 1.0);
CGFloat colors1 [] = {
27/255.0, 0/255.0, 7/255.0, 1.0,
129/225.0, 46/255.0, 64/255.0, 1.0
};
CGFloat colors2 [] = {
159/255.0, 253/255.0, 255.0, 1.0,
27/225.0, 128/255.0, 213/255.0, 1.0,
41/225.0, 216/255.0, 255/255.0, 1.0
};
CGFloat colors3 [] =
{
132/255.0, 190/255.0, 13/255.0, 1.0,
37/225.0, 71/255.0, 8/255.0, 1.0,
44/225.0, 138/255.0, 12/255.0, 1.0
};
CGGradientRef gradient1 = [DrawAndAnimation gradient:context color:colors1];
[DrawAndAnimation drawRadiusAndGradientRect:rect radius:0 contex:context gradient:gradient1];
CGGradientRelease(gradient1);
CGFloat percent = (preValue/maxValue) * (rect.size.width-2);
if (percent >= (rect.size.width-2))
{
percent = (rect.size.width-2);
}
CGRect progressRect = CGRectMake(rect.origin.x + 1, rect.origin.y + 1,percent, rect.size.height - 2);
if (preValue < maxValue)
{
CGGradientRef gradient2 = [DrawAndAnimation gradient3:context color:colors2];
[DrawAndAnimation drawRadiusAndGradientRectNotDrawHighlight:progressRect radius:0 contex:context gradient:gradient2];
CGGradientRelease(gradient2);
}
else
{
CGGradientRef gradient2 = [DrawAndAnimation gradient3:context color:colors3];
[DrawAndAnimation drawRadiusAndGradientRectNotDrawHighlight:progressRect radius:0 contex:context gradient:gradient2];
CGGradientRelease(gradient2);
}
}
@end