iOS 使用 Core Plot 繪製統計圖表入門

來源:互聯網
上載者:User

iOS(iPhone/iPad) 形組件有兩個有名的,s7graphview 和
Core Plot,它們都是在 Google 上託管的代碼,聽說 Core Plot 比較強,因為前者僅支援曲線圖,後者呢曲線圖、餅圖、柱狀圖等通吃,且較活躍。那就專註下 Core Plot 的使用。它提供了 Mac OS X 和 iOS 下的組件庫,我只用到它的 iOS 圖表庫。

Core Plot 能畫出來圖表的效果應該多看看:http://code.google.com/p/core-plot/wiki/PlotExamples,相信看過之後絕大多數的 iOS 下的圖表可以用它來滿足你了。

配置其實很簡單的,先從 http://code.google.com/p/core-plot/downloads/list 下載最新版的 Core Plot,比如當前是:CorePlot_0.4.zip,解壓開,然後就兩步:

1. 把目錄 CorePlot_0.4/Binaries/iOS 中的 libCorePlotCocoaTouch.a 和整個子目錄 CorePlotHeaders 從 Finder 中一併拖入到當前項目中,選擇 Copy item into destination group's folder (if needed),Add to targets 裡選上相應的 target。此時你可以在項目的 target 中 Build Phases 頁裡 Link Binary With Libraries 中看到有了 libCorePlot-CocoaTouch.a.

2. 再到相應 Target 的 Build Settings 頁裡,Other Linker Flags 項中加上 -ObjC -all_load

[注]我所用的 Xcode 是 4.1 版本的。Xcode 3 的 Target 設定項位置稍有不同。

配置就這麼完成了,使用時只需要 #import "CorePlot-CocoaTouch.h",下面來體驗一個最簡單的例子,下載的 CorePlot 包中雖然有一些例子,但還是需要一個能讓人好理解並獲得最快速體驗的。比如像這中這麼一個最簡單的曲線圖,最基本的代碼要素應該有哪些呢?

本文原始連結:http://unmi.cc/ios-coreplot-chart-started, 來自:隔葉黃鶯 Unmi Blog

主要代碼就是下面那樣:

0102030405060708091011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 ////  Created by Unmi Qiu on 8/11/11.//  Copyright 2011 . All rights reserved.// #import <UIKit/UIKit.h>#import "CorePlot-CocoaTouch.h" @interface
TestCorePlotViewController : UIViewController<CPTPlotDataSource> {    NSMutableArray
*dataArray;}@end @implementation
TestCorePlotViewController #pragma mark - View lifecycle - (void) viewDidAppear:(BOOL)animated {         //初始化數組,並放入十個 0 - 20 間的隨機數    dataArray = [[NSMutableArray
alloc] init];    for(int
i=0; i< 10; i++){        [dataArray addObject:[NSNumber
numberWithInt:rand()%20]];    }     CGRect frame = CGRectMake(10,10, 300,100);         //圖形要放在一個 CPTGraphHostingView 中,CPTGraphHostingView 繼承自 UIView    CPTGraphHostingView *hostView = [[CPTGraphHostingView alloc] initWithFrame:frame];         //把 CPTGraphHostingView 加到你自己的 View 中    [self.view addSubview:hostView];    hostView.backgroundColor = [UIColor
blueColor];         //在 CPTGraph 中畫圖,這裡的 CPTXYGraph 是個曲線圖    //要指定 CPTGraphHostingView 的 hostedGraph 屬性來關聯    CPTXYGraph *graph = [[CPTXYGraph alloc] initWithFrame:hostView.frame];    hostView.hostedGraph = graph;         CPTScatterPlot *scatterPlot = [[CPTScatterPlot alloc] initWithFrame:graph.bounds];    [graph addPlot:scatterPlot];    scatterPlot.dataSource =
self;
//設定資料來源,需應用 CPTPlotDataSource 協議         //設定 PlotSpace,這裡的 xRange 和 yRange 要理解好,它決定了點是否落在圖形的可見地區    //location 值表示座標起始值,一般可以設定元素中的最小值    //length 值表示從起始值上浮多少,一般可以用最大值減去最小值的結果    //其實我倒覺得,CPTPlotRange:(NSRange) range 好理解些,可以表示值從 0 到 20    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) scatterPlot.plotSpace;    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0)                                                    length:CPTDecimalFromFloat([dataArray count]-1)];    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0)                                                    length:CPTDecimalFromFloat(20)];         //下面省去了座標與線型及其他圖形風格的代碼         [plotSpace release];    [graph release];    [hostView release];} //詢問有多少個資料,在 CPTPlotDataSource 中聲明的- (NSUInteger) numberOfRecordsForPlot:(CPTPlot *)plot {    return
[dataArray count];} //詢問一個個資料值,在 CPTPlotDataSource 中聲明的- (NSNumber
*) numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
{
    if(fieldEnum == CPTScatterPlotFieldY){   
//詢問 Y 值時        return
[dataArray objectAtIndex:index];    }else{                                   
//詢問 X 值時        return
[NSNumber
numberWithInt:index];
    }} - (void) dealloc {    [dataArray release];    [super
dealloc];} @end

關於更詳細的 Core Plot 使用,下面還會繼續作介紹的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.