`
啸笑天
  • 浏览: 3466237 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

股票折线图demo(兼容SDK7编译,ios7)

 
阅读更多

https://github.com/easyui/StockPlotting

 

//
//  SPView.m
//  StockPlotting
//
//  Created by EZ on 13-11-5.
//  Copyright (c) 2013年 cactus. All rights reserved.
//
#define NLSystemVersionGreaterOrEqualThan(version)  ([[[UIDevice currentDevice] systemVersion] floatValue] >= version)
#define IOS7_OR_LATER   NLSystemVersionGreaterOrEqualThan(7.0)
#define GraphColor      [[UIColor greenColor] colorWithAlphaComponent:0.5]
#define str(index)                                  [NSString stringWithFormat : @"%.f", [[self.values objectAtIndex:(index)] floatValue] * kYScale]
#define point(x, y)                                 CGPointMake((x) * kXScale, yOffset + (y) * kYScale)
#import "SPView.h"
@interface SPView ()
@property (nonatomic, strong)   dispatch_source_t timer;

@end
@implementation SPView

const CGFloat   kXScale = 15.0;
const CGFloat   kYScale = 50.0;

static inline CGAffineTransform
CGAffineTransformMakeScaleTranslate(CGFloat sx, CGFloat sy,
    CGFloat dx, CGFloat dy)
{
    return CGAffineTransformMake(sx, 0.f, 0.f, sy, dx, dy);
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];

    if (self) {
        // Initialization code
    }

    return self;
}

- (void)awakeFromNib
{
    [self setContentMode:UIViewContentModeRight];
    _values = [NSMutableArray array];

    __weak id   weakSelf = self;
    double      delayInSeconds = 0.25;
    self.timer =
        dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,
            dispatch_get_main_queue());
    dispatch_source_set_timer(
        _timer, dispatch_walltime(NULL, 0),
        (unsigned)(delayInSeconds * NSEC_PER_SEC), 0);
    dispatch_source_set_event_handler(_timer, ^{
            [weakSelf updateValues];
        });
    dispatch_resume(_timer);
}

- (void)updateValues
{
    double nextValue = sin(CFAbsoluteTimeGetCurrent())
        + ((double)rand() / (double)RAND_MAX);

    [self.values addObject:
    [NSNumber numberWithDouble:nextValue]];
    CGSize size = self.bounds.size;

    /*
     *   UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
     *   if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight){
     *
     *
     *   }
     */
    CGFloat     maxDimension = size.width; // MAX(size.height, size.width);
    NSUInteger  maxValues =
        (NSUInteger)floorl(maxDimension / kXScale);

    if ([self.values count] > maxValues) {
        [self.values removeObjectsInRange:
        NSMakeRange(0, [self.values count] - maxValues)];
    }

    [self setNeedsDisplay];
}

- (void)dealloc
{
    dispatch_source_cancel(_timer);
}

- (void)drawRect:(CGRect)rect
{
    if ([self.values count] == 0) {
        return;
    }

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(ctx,
        [GraphColor CGColor]);

    CGContextSetLineJoin(ctx, kCGLineJoinRound);
    CGContextSetLineWidth(ctx, 2);

    CGMutablePathRef path = CGPathCreateMutable();

    CGFloat             yOffset = self.bounds.size.height / 2;
    CGAffineTransform   transform =
        CGAffineTransformMakeScaleTranslate(kXScale, kYScale,
            0, yOffset);
    CGPathMoveToPoint(path, &transform, 0, 0);
    CGPathAddLineToPoint(path, &transform, self.bounds.size.width, 0); // self.bounds.size.width其实大了kXScale倍

    CGFloat y = [[self.values objectAtIndex:0] floatValue];
    CGPathMoveToPoint(path, &transform, 0, y);
    [self drawAtPoint:point(0, y) withStr:str(0)];

    for (NSUInteger x = 1; x < [self.values count]; ++x) {
        y = [[self.values objectAtIndex:x] floatValue];
        CGPathAddLineToPoint(path, &transform, x, y);
        [self drawAtPoint:point(x, y) withStr:str(x)];
    }

    CGContextAddPath(ctx, path);
    CGPathRelease(path);
    CGContextStrokePath(ctx);
}

- (void)drawAtPoint:(CGPoint)point withStr:(NSString *)str
{
    
    if (IOS7_OR_LATER) {
       #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
        [str drawAtPoint:point withAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:8], NSStrokeColorAttributeName:GraphColor}];
       #endif
    } else {
        [str drawAtPoint:point withFont:[UIFont systemFontOfSize:8]];
    }
     
}

@end

 

分享到:
评论

相关推荐

    ios折线图demo

    这个“ios折线图demo”提供了一个基础的实现,帮助开发者快速理解如何在iOS应用中创建折线图表。 在iOS中,我们可以使用Apple的Core Plot库来实现折线图。Core Plot是一个强大的2D图形框架,支持多种图表类型,包括...

    iOS股票折线图

    在iOS应用开发中,创建股票折线图是展示金融数据常用的一种方式,它能直观地反映出股票价格随时间的变化趋势。本项目“iOS股票折线图”着重介绍如何在iOS平台下实现这一功能,主要涉及的技术包括数据解析、图形渲染...

    ios-滑动折线图.zip

    7. **自定义视图**:为了实现特定的折线图样式和交互,可能需要创建自定义的UIView子类,重写`draw(_ rect: CGRect)`方法来绘制折线,并添加手势识别器以处理用户的交互行为。 8. **性能优化**:在处理大量数据时,...

    android折线图demo

    "android折线图demo"是一个示例项目,展示了如何在Android应用中实现动态的、可定制的折线图。这个项目主要关注的是使用折线图来表示数据变化,允许开发者根据需要调整横轴和纵轴的刻度线以及圆点的颜色,同时能够...

    自定义折线图Demo

    "自定义折线图Demo"是一个专门用于创建个性化折线图的示例项目,它可以帮助开发者理解和掌握如何在Android应用中实现自定义的图形绘制。下面将详细阐述这个Demo所涉及的知识点。 1. **自定义View**: 自定义View是...

    MPAndroidChart折线图Demo

    这个"MPAndroidChart折线图Demo"是开发者分享的一个实例,帮助我们了解如何在Android应用中集成和使用MPAndroidChart库来绘制折线图。 首先,我们需要了解MPAndroidChart的基本用法。在Android Studio中,可以通过...

    iOS 绘制折线图小demo

    这个“iOS绘制折线图小demo”是一个基于CoreGraphics框架实现的简单示例,旨在帮助开发者了解如何在iOS应用中自定义绘制折线图。 CoreGraphics是苹果提供的一套低级图形绘制API,它支持2D图形渲染,包括线条、形状...

    折线图demo

    "折线图demo"项目显然旨在提供一个示例,演示如何在应用程序中创建具有平滑线条和用户交互功能的折线图。这个项目可能包含了两个关键部分:MPChartLib和MySelfChart。 **MPChartLib**是一个流行的开源图表库,广泛...

    jfreechart折线图demo

    **JFreeChart 折线图 Demo 知识点详解** JFreeChart 是一个用 Java 编写的开源图表库,它提供了丰富的图表类型,包括折线图、柱状图、饼图等,适用于各种数据可视化需求。在这个“jfreechart折线图demo”中,我们将...

    Android蓝牙socket应用编程-心电图-动态折线图demo

    这个"Android蓝牙socket应用编程-心电图-动态折线图demo"涵盖了几个关键的知识点,让我们逐一深入探讨。 首先,**蓝牙协议**是实现设备间无线通信的基础。Android支持蓝牙低功耗(Bluetooth Low Energy, BLE)和...

    条形图和折线图demo

    本项目是一个"条形图和折线图demo",旨在演示如何在Android应用中有效地展示这些图形,并且还包含了启动动画的绘制,提升用户体验。 1. **条形图**: 条形图是一种以矩形的长度表示数量的统计图,适用于比较不同...

    C# winform使用zedgraph制作饼图条形图和折线图的demo

    这个"C# winform使用zedgraph制作饼图条形图和折线图的demo"正是为了帮助开发者更好地理解和应用ZedGraph库。 ZedGraph是一个开源的.NET图形库,它可以方便地集成到WinForm应用中,用以绘制2D图形。下面我们将详细...

    折线图demo highCharts

    在本例中,我们关注的是使用HighCharts库来创建折线图的Demo。 **HighCharts库简介** HighCharts是一个基于JavaScript的开源图表库,它提供了丰富的图表类型,包括折线图、柱状图、饼图、散点图等。HighCharts支持...

    Android 折线 柱状图 demo

    这个"Android 折线 柱状图 demo"是一个实例,它展示了如何在Android应用中创建并使用这两种图表。 首先,折线图通常用于展示数据随时间的变化趋势,而柱状图则适用于比较不同类别的数值大小。在Android应用中,我们...

    iOS开发 图表Chart 折线图、柱状图

    本项目主要关注的是折线图和柱状图,这两种图表类型在各种应用程序中都有广泛的应用,如金融应用展示股票走势,健康应用追踪用户健康数据等。接下来,我们将深入探讨如何在iOS平台上实现折线图和柱状图。 首先,...

    .net js加载折线图DEMO

    标题中的".net js加载折线图DEMO"指的是一个使用JavaScript在.NET环境中创建并加载的折线图示例项目。这个DEMO展示了如何利用前端技术与后端.NET平台相结合,来实现数据可视化功能,特别是折线图这种常用的数据展示...

    ios-仿墨迹天气温度折线图.zip

    仿墨迹天气温度折线图,主要是贝塞尔控制点的封装抽取,也可以去GitHub上查看 https://github.com/xiaogehenjimo/weatherLineDemo

    关于ios的折线图制作

    本文将深入探讨如何在iOS项目中创建一个功能完善的折线图,并重点讲解提供的"Demo-折线王者six"压缩包中的实现方法。 首先,我们需要一个合适的图形库来帮助我们绘制折线图。在iOS中,有多种开源库可以选择,如Core...

    android 折线图demo

    "android 折线图demo"是一个使用GraphView库实现的Android应用程序示例,用于展示如何在Android设备上绘制动态和交互式的折线图。GraphView是一个强大的开源库,它允许开发者轻松地在Android应用中添加各种图表,...

    【Python资源】PySide2 图形界面中嵌入 pyqtgraph 实现折线图绘制的 demo 案例

    通过这个案例,用户可以在PySide2构建的图形用户界面(GUI)中嵌入pyqtgraph库,实现实时或交互式折线图的绘制与展示。 二、资源内容 PySide2 GUI构建:案例首先展示了如何使用PySide2创建基本的图形用户界面,...

Global site tag (gtag.js) - Google Analytics