`

iPhone LineChart

F# 
阅读更多

说实话,OC代码写着真的很别扭,速度明显慢N倍.

下面是一个简单的line chart,虽然很难看,但是好歹照虎画猫也能弄个模子出来...

#define AXIS_Y_ITEM_COUNT 5
#define AXIS_X_ITEM_COUNT 5

NSMutableArray* radom_data() {
	srand((unsigned)time(NULL));
	
	float base = 30;
	
	NSMutableArray *array = [[NSMutableArray alloc] init];
	for (int i = 0; i < 100; i++) {
		NSLog(@"%f", (rand() % 1000) / 100.f + base);
		[array addObject:[NSNumber numberWithFloat:((rand() % 1000) / 100.f + base)]];
	}
	
	return array;
}

float _max(NSArray *data) {
	float max = [[data objectAtIndex:0] floatValue];
	for(NSNumber* num in data) {
		max = [num floatValue] > max ? [num floatValue] : max;
	}
	
	return max;
}

float _min(NSArray *data) {
	float min = [[data objectAtIndex:0] floatValue];
	for(NSNumber* num in data) {
		min = [num floatValue] < min ? [num floatValue] : min;
	}
	
	return min;
	
}


- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        viewFrame = frame;
    }
    return self;
}


- (void)drawRect:(CGRect)rect {
	NSLog(@"########################       %f    %f", viewFrame.size.width, viewFrame.size.height);
	
	NSNumberFormatter *numberFormatter = [NSNumberFormatter new];
	[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
	[numberFormatter setMinimumFractionDigits:2];
	[numberFormatter setMaximumFractionDigits:2];
	
	
	NSMutableArray* data = radom_data();
	float max = _max(data);
	float min = _min(data);
	
	float offsetWidth = 80.0f; // 50 * 2 + 10 * 2
	float offsetHeight = 60.0f; // 20 * 2 + 10 * 2
	
	float stepY = (max - min) / AXIS_Y_ITEM_COUNT;
	float axisY_step = (viewFrame.size.height - offsetHeight) / (max - min);
	
	
	CGContextRef context = UIGraphicsGetCurrentContext();
	CGContextClearRect(context, rect);

	
	for (int i = 0; i < AXIS_Y_ITEM_COUNT + 1; i++) {
		CGFloat lineDash[2];
		lineDash[0] = 10.0f;
		lineDash[1] = 15.0f;

		CGContextSetLineDash(context, 0.0f,  lineDash, 2);
		CGContextSetLineWidth(context, 0.6f);
		
		CGPoint sPoint = CGPointMake(offsetWidth / 2, viewFrame.size.height - (offsetHeight / 2) - i * stepY * axisY_step);
		CGPoint ePoint = CGPointMake(viewFrame.size.width - offsetWidth / 2, viewFrame.size.height - (offsetHeight / 2) - i * stepY * axisY_step);
		
		
		
		CGContextMoveToPoint(context, sPoint.x, sPoint.y);
		CGContextAddLineToPoint(context, ePoint.x, ePoint.y);
		CGContextClosePath(context);
		CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
		CGContextStrokePath(context);
		

		UIFont *axisFont = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]];
		NSNumber *axisValue = [NSNumber numberWithFloat:(min + i * stepY)];
		
		CGRect axisRect = CGRectMake(0.0f, sPoint.y - axisFont.capHeight, 50.0f, 20.0f);
		//CGRect axisRect = CGRectMake(0.0f, sPoint.y, 50.0f, 20.0f);
		
						
		[[UIColor redColor] set];
		
		NSLog(@"%@", [numberFormatter stringForObjectValue:axisFont]);
		[[numberFormatter stringForObjectValue:axisValue] drawInRect:axisRect withFont:axisFont
				  lineBreakMode:UILineBreakModeTailTruncation alignment:UITextAlignmentLeft];
		
	}
	
	
	float stepX = 100 / AXIS_X_ITEM_COUNT;
	float axisX_step = (viewFrame.size.width - offsetWidth) / 100;
	
	
	CGContextSetLineDash(context, 0.0f, NULL, 0);
    for(int i = 0; i < AXIS_X_ITEM_COUNT + 1; i++) {
		CGPoint sPoint = CGPointMake(offsetWidth / 2 + i * stepX * axisX_step, viewFrame.size.height - offsetHeight / 2);
		
		CGContextMoveToPoint(context, sPoint.x, viewFrame.size.height - offsetHeight / 2);
		CGContextAddLineToPoint(context, sPoint.x, viewFrame.size.height - offsetHeight / 2 + 10);
		CGContextClosePath(context);
		CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
		CGContextStrokePath(context);
		
		CGRect axisRect = CGRectMake(sPoint.x - 50 / 2, viewFrame.size.height - 20, 50.0f, 20.0f);
		UIFont *axisFont = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]];
		NSNumber *axisValue = [NSNumber numberWithInt:(i * stepX)];
		
		NSLog(@"%f   %f  %@", axisRect.origin.x,  axisRect.origin.y, [axisValue stringValue]);
		[[UIColor yellowColor] set];
		[[axisValue stringValue] drawInRect:axisRect withFont:axisFont
							  lineBreakMode:UILineBreakModeTailTruncation alignment:UITextAlignmentCenter];
	}
	
	/*
	CGContextSetLineDash(context, 0.0f, NULL, 0);
	CGContextMoveToPoint(context, offsetWidth / 2, 0.0);
	CGContextAddLineToPoint(context, offsetWidth / 2, viewFrame.size.height - offsetHeight / 2 + 10);
	CGContextClosePath(context);
	CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
	CGContextStrokePath(context);
	*/
	
	int _x = 0;
	
	for (NSNumber *number in data) {
		float value = [number floatValue];
		CGPoint point = CGPointMake(_x++ * axisX_step + offsetWidth / 2, viewFrame.size.height - offsetHeight / 2 - (value - min) * axisY_step);
		if(_x == 1) {
			CGContextMoveToPoint(context, point.x, point.y);
		}
		else {
			CGContextAddLineToPoint(context, point.x, point.y);
		}
	}
	
	//CGContextSetLineCap(context, kCGLineCapRound);
	//CGContextSetLineJoin(context, kCGLineJoinRound);
	CGContextSetStrokeColorWithColor(context, [UIColor cyanColor].CGColor);
	CGContextStrokePath(context);
}



- (void)dealloc {
    [super dealloc];
}

@synthesize viewFrame;
 



 

 
  • 大小: 56.4 KB
  • 大小: 45 KB
分享到:
评论

相关推荐

    iOS LineChart(iPhone源代码)

    来源:github/ios-linechartLicence:MIT平台:iOS设备:iPhone / iPad作者:Marcel Ruegenberg  效果很不错的曲线图,可以绘制坐标轴,并且可以在曲线图上标注小圆点。手指在曲线图上滑动时,小圆点上还会出现...

    iPhone Chart XCode Project and Source Code

    5. **线图(Line Chart)**:线图用于显示数据的变化趋势,常用于时间序列数据。实现线图可能涉及到描点、连接点、平滑曲线等技术,需要对坐标系统有深入理解。 6. **柱状图(Bar Chart)**:柱状图用于比较不同...

    swift-FSLineChart是一个简单的iOS线性图表库

    lineChart.xAxisLabels = ["Jan", "Feb", "Mar", "Apr", "May"] lineChart.data = self.getData() lineChart.shouldAnimate = true } func getData() -&gt; [FSLineChartData] { // 创建数据模型 let data1 = ...

    iPhone狂:约会iPhone

    根据提供的标题“iPhone狂:约会iPhone”以及描述“iPhone狂:约会iPhone”,我们可以理解这篇文章主要聚焦于iPhone的相关内容。然而,由于正文部分并未提供具体的信息或数据,我们将基于标题和描述来探讨与iPhone...

    axure iphone手机元件库原型库

    此外,这个库可能还包含了iPhone的屏幕尺寸适配元素,例如针对不同尺寸的iPhone(如iPhone SE、iPhone 8、iPhone X系列)的布局和组件。 使用这个元件库,原型设计师无需从零开始绘制每个组件,可以直接拖放这些...

    iPhone 11维修资料

    《iPhone 11维修资料详解》 在当今的科技时代,智能手机已经成为我们日常生活的重要组成部分,尤其是像iPhone 11和iPhone 11 Pro这样的高端设备。这些设备集成了先进的技术,为用户带来了卓越的体验。然而,随着...

    axureiPhone机型元件库

    对于iPhone元件库,其涵盖了多种iPhone机型,例如iPhone SE、iPhone 6/6S/7/8系列、iPhone X/XS系列、iPhone XR、iPhone 11系列、iPhone 12系列以及iPhone 13系列等。这些模型不仅包括手机的外观,还可能包括屏幕...

    Axure元件库iPhone

    "Axure元件库iPhone"是专门为设计iPhone应用原型而定制的一套元件集合。该库不仅提高了设计效率,还确保了设计的准确性和一致性,因为这些元件都是按照iOS设备的界面规范和设计风格制作的。 首先,我们来看一下...

    iPhone提示音大全

    在IT领域,特别是移动设备部分,苹果公司的iPhone一直以其独特的用户体验和设计著称。其中,iPhone的提示音是用户日常操作中不可或缺的一部分,它们为用户提供了一系列声音反馈,以告知用户各种事件的发生。在这个名...

    iphone X iphone 8 原型框

    iphone X iphone 8 原型框 iphone X iphone 8 原型框

    iphone13 ios ipcc52.0.zip

    标题 "iphone13 ios ipcc52.0.zip" 暗示了这可能是一个针对iPhone 13设备的iOS更新文件,其中包含了IPCC(International Provider Configuration)文件。IPCC文件是苹果设备用于设置运营商配置的重要文件,它通常...

    Iphone XS 电路原理图.pdf

    iPhone XS 电路原理图 iPhone XS 电路原理图是苹果公司生产的 iPhoneXS 手机的电路原理图。该图纸详细介绍了 iPhoneXS 手机的电路设计,包括电源管理、射频组件、天线设计、存储器设计、处理器设计等方面的技术细节...

    电脑免费发表iPhone说说

    想在普通电脑上让你发表的空间说说显示来自iPhone嘛?火狐专用浏览器就可以实现这个效果!不但可以显示发布的说说来自iPhone触屏版,还可以显示iPad或android,绝对给力,不管你信不信,反正我是信了,我已经测试100%...

    iphone4完整电路图PCB

    《iPhone 4 完整电路图PCB详解》 iPhone 4是苹果公司在2010年推出的一款标志性智能手机,其设计与技术在当时堪称业界领先。本篇将深入解析iPhone 4的完整电路图PCB(Printed Circuit Board),帮助读者理解这款设备...

    苹果Iphone原机铃声包

    【苹果iPhone原机铃声包】是一份专为苹果iPhone用户设计的资源集合,它包含了iPhone出厂时预装的一些经典铃声。这些铃声是苹果公司精心挑选并制作的,旨在提供用户多样化的选择,以满足不同用户的个性化需求。通过这...

    iphone13通用ipcc49.0.zip

    标题中的“iphone13通用ipcc49.0.zip”表明这是一个与苹果iPhone 13设备相关的软件更新或配置文件,IPCC(International Provider Configuration)是Apple用来管理运营商设置的一种文件格式。这些设置通常涉及手机的...

    iPhone4S 5.1.1固件

    ### iPhone4S 5.1.1固件详解 #### 一、固件版本与设备兼容性 在本文档中,我们重点介绍的是iPhone 4S的5.1.1固件版本及其相关信息。固件是指设备上的底层操作系统,对于苹果设备而言,这通常指的是iOS系统的一个...

    Iphone开发系列源码——Iphone主题源码

    Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码...

    原汁原味iPhone内置铃声大放送

    本主题聚焦于“原汁原味iPhone内置铃声大放送”,这表明我们将探讨如何获取、设置以及管理苹果iPhone设备上的内置及自定义铃声。 iPhone设备以其精致的设计和流畅的操作系统闻名,而其内置的铃声也是其特色之一。...

Global site tag (gtag.js) - Google Analytics