用UILabel封装自定义柱状图
来源:互联网 发布:怎样加入淘宝开网店 编辑:程序博客网 时间:2024/05/30 02:24
原理:给自定义的View类两个数组类型的参数,一个存年份,一个存收入,并且传入参数添加手势。在外面调用的时候只需要传入两个数组即可。
核心算法:以数组形式传入的年份依次赋给UILabel,以数组形式传入的收入来计算柱条的高度,这里关键是需要计算柱条的起点纵坐标即可
y(起点纵坐标)=frame.size.height-50 - num*(frame.size.height-50)/2000.0;
等于最大允许高度 减去 最大允许高度 *(数组数据值/数据范围最大值)
Height-Height *(array[i]/定值A) 注意:如果数据范围在0-2000,那么这里的定值A就是2000;
点击手势:添加点击手势使得点击柱条的时候使用UIView动画控制的 的alpha值变化显示一个UILabel来展示数据(动画很简单暂略)
使用方法如下:
#import "MyView.h"
MyView *myVIew = [[MyViewalloc]initWithFrame:CGRectMake(50,100, 300, 400)yearArr:@[@"2001",@"2002",@"2003",@"2004"]numberArr:@[@"1000",@"500",@"1500",@"2000"] target:selfaction:@selector(clickpic:)];
[self.viewaddSubview:myVIew];
下面具体说明如何封装柱状图:
a.方法声明
@interface MyView : UIView
- (instancetype)initWithFrame:(CGRect)frame yearArr:(NSArray *)yearArr numberArr:(NSArray *)numberArr target:(id)target action:(SEL)action;
@end
b.方法实现@implementation MyView
- (instancetype)initWithFrame:(CGRect)frame yearArr:(NSArray *)yearArr numberArr:(NSArray *)numberArr target:(id)target action:(SEL)action
{
self = [superinitWithFrame:frame];
if (self) {//此处计算的是高度
self.backgroundColor = [UIColoryellowColor];
self.userInteractionEnabled =YES;
labY.backgroundColor = [UIColorblackColor];
[self addSubview:labY];
float a = yearArr.count;
NSInteger b = frame.size.width/(a);
for (int i=0; i< a; i++) {
//每年数据
NSString *number = numberArr[i];
float num = [number floatValue];
//年份
NSString *year = yearArr[i];
UILabel *showlab = [[UILabelalloc]initWithFrame:CGRectMake(i*b,frame.size.height-50 - num*(frame.size.height-50)/2000.0, b-1, num*(frame.size.height-50)/2000.0)];
UITapGestureRecognizer *imageTap = [[UITapGestureRecognizeralloc] initWithTarget:targetaction:action];
//打开交互,否则不会响应
showlab.userInteractionEnabled = YES;
//添加手势
[showlab addGestureRecognizer:imageTap];
//添加边框
showlab.layer.borderWidth =1;
showlab.layer.borderColor = [[UIColorblackColor]CGColor];
//使用随机色
showlab.backgroundColor =
[selfrandomColor];
showlab.tag = 100+i;
[self addSubview:showlab];
UILabel *yearLab = [[UILabelalloc]initWithFrame:CGRectMake(i*b, frame.size.height-50, b-1, 48)];
yearLab.text = year;
yearLab.textAlignment = 1;
//使得年份和每年数据颜色一致
yearLab.textColor = showlab.backgroundColor;
[self addSubview:yearLab];
}
}
return self;
}
//自定义的随机数颜色方法
- (UIColor*)randomColor
{
CGFloat hue = ( arc4random() % 256 / 256.0 ); // 0.0 to 1.0
CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from white
CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from black
return [UIColorcolorWithHue:hue saturation:saturationbrightness:brightness alpha:1];
}
- 用UILabel封装自定义柱状图
- 自定义组件之【柱状图】详解 已封装成View
- 自定义柱状图
- 自定义柱状图
- 自定义UILabel
- 自定义 UIlabel
- 折线图柱状图封装
- 柱状图js封装插件
- 自定义控件-- 柱状图--Android
- WPF 自定义柱状图
- android自定义柱状图
- android自定义横向柱状图
- ios swfit 自定义柱状图
- 自定义view之柱状图
- 自定义圆头柱状图
- echarts自定义柱状图数字
- 自定义简单的柱状图
- 自定义View之柱状图
- java内存空间
- 华为机试——连续整数
- 从“我”到“我们”
- rem Chrome bug:rem单位的字号在Chrome浏览器中过大
- 常用的正则表达式
- 用UILabel封装自定义柱状图
- Theano-Deep Learning Tutorials 笔记:Convolutional Neural Networks (LeNet)
- 什么是Hadoop,怎样学习Hadoop?
- Python进阶06-10
- 关于GPS 转换实用地图算法
- word怎样批量删除换行符?
- 2015年总结和2016年计划
- Python]网络爬虫(四):Opener与Handler的介绍和实例应用
- linux网络设备—PHY