#import <UIKit/UIKit.h>
@interface TJProgressView : UIView
@property(nonatomic,assign)CGFloat progressValue;
- (void)showInView:(UIView *)baseView;
@end
//
// TJProgressView.m
// CurveProgressDemo
//
// Created by MJ on 15/6/12.
// Copyright (c) 2015年 SNWFMJ. All rights reserved.
//
#import "TJProgressView.h"
#define kContainerViewSize CGSizeMake(30.f, 25.f)
#define kPadding 5.f
@interface TJProgressView ()
{
UIView *leftView;
UIView *middleView;
UIView *rightView;
UIView *containerView;
}
@end
@implementation TJProgressView
- (instancetype)init
{
if (self = [super init])
{
[self setUp];
}
return self;
}
- (void)setUp
{
containerView = [[UIView alloc ]init];
containerView.translatesAutoresizingMaskIntoConstraints = NO;
containerView.backgroundColor = [UIColor clearColor];
[self addSubview:containerView];
NSArray *containerView_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[containerView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(containerView)];
NSArray *containerView_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[containerView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(containerView)];
[self addConstraints:containerView_H];
[self addConstraints:containerView_V];
[self test];
}
- (void)test
{
leftView = [[UIView alloc]init];
leftView.translatesAutoresizingMaskIntoConstraints = NO;
leftView.backgroundColor = [UIColor yellowColor];
[containerView addSubview:leftView];
NSArray *leftView_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[leftView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(leftView)];
[containerView addConstraints:leftView_V];
middleView = [[UIView alloc]init];
middleView.translatesAutoresizingMaskIntoConstraints = NO;
middleView.backgroundColor = [UIColor redColor];
[containerView addSubview:middleView];
NSArray *middleView_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[middleView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(middleView)];
[containerView addConstraints:middleView_V];
rightView = [[UIView alloc]init];
rightView.translatesAutoresizingMaskIntoConstraints = NO;
rightView.backgroundColor = [UIColor blueColor];
[containerView addSubview:rightView];
NSArray *rightView_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[rightView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(rightView)];
[containerView addConstraints:rightView_V];
NSDictionary *dic_paddingConstraint = @{
@"padding":@(kPadding)
};
NSArray *allView_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[leftView]-padding-[middleView(leftView)]-padding-[rightView(middleView)]-0-|" options:0 metrics:dic_paddingConstraint views:NSDictionaryOfVariableBindings(leftView,middleView,rightView)];
[containerView addConstraints:allView_H];
}
- (void)showInView:(UIView *)baseView
{
NSDictionary *dic_selfConstraint = @{
@"height":@(kContainerViewSize.height),
@"width":@(kContainerViewSize.width)
};
self.translatesAutoresizingMaskIntoConstraints = NO;
[baseView addSubview:self];
NSLayoutConstraint *self_CenterX = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:baseView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0];
NSLayoutConstraint *self_CenterY = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:baseView attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
NSArray *self_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[self(width)]" options:0 metrics:dic_selfConstraint views:NSDictionaryOfVariableBindings(self)];
NSArray *self_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[self(height)]" options:0 metrics:dic_selfConstraint views:NSDictionaryOfVariableBindings(self)];
[baseView addConstraints:@[self_CenterX,self_CenterY]];
[baseView addConstraints:self_H];
[baseView addConstraints:self_V];
}
- (void)setProgressValue:(CGFloat)progressValue
{
_progressValue = progressValue;
[self addAnimation:containerView.layer progressValue:_progressValue];
}
- (void)addAnimation:(CALayer *)layer progressValue:(CGFloat)value
{
CABasicAnimation *leftAnimation = [CABasicAnimation animationWithKeyPath:@"position.y"];
leftAnimation.fromValue =@0;
leftAnimation.toValue = @(value*kContainerViewSize.height);
leftAnimation.repeatCount = MAXFLOAT;
leftAnimation.duration = 0.5f;
[layer addAnimation:leftAnimation forKey:@"test"];
}
@end
//
// ViewController.m
// CurveProgressDemo
//
// Created by MJ on 15/6/12.
// Copyright (c) 2015年 SNWFMJ. All rights reserved.
//
#import "ViewController.h"
#import "TJProgressView.h"
@interface ViewController ()
{
TJProgressView *progressView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
progressView = [[TJProgressView alloc]init];
[progressView showInView:self.view];
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(changeValue) userInfo:nil repeats:YES];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)changeValue
{
progressView.progressValue =0.5;
}
@end