【ios開(kāi)發(fā)】 關(guān)于Charts框架第一期:集成和繪制折線圖

前段時(shí)間寫(xiě)項(xiàng)目的時(shí)候, 遇到了一個(gè)需要畫(huà)折線圖需求,研究了一下, 覺(jué)得還是直接使用成熟的Charts框架(一款用于繪制圖表的框架,可以繪制柱狀圖、折線圖、K線圖、餅狀圖等)來(lái)實(shí)現(xiàn)。

去git上下載了Charts源碼看了下之后, 發(fā)現(xiàn)是swift版本的, 而我這個(gè)項(xiàng)目是使用OC寫(xiě)的, 那就記錄一下如何集成以及oc和swift混編吧~

折線圖.png

一、用cocoapods導(dǎo)入swift框架到OC項(xiàng)目

cocoapods的安裝和使用這里就不詳敘了,如果你還沒(méi)有安裝cocospods,請(qǐng)參考此鏈接(http://www.itdecent.cn/p/8115e7afce03)

我們直接開(kāi)始pod。

打開(kāi)我們的項(xiàng)目,點(diǎn)擊Pods-> Podfile, 輸入 pod 'Charts', use_frameworks! -> 保存。

pod Charts.png

打開(kāi)終端, cd 進(jìn)項(xiàng)目目錄, 然后pod insatll, 靜靜等待pod 完成。

pod install.png

這里有一個(gè)重點(diǎn): "use_frameworks!"
為什么一定要寫(xiě)這句代碼呢?

oc項(xiàng)目cocoapods后,默認(rèn)第三方庫(kù) #use_frameworks!
swift項(xiàng)目cocoapods后,默認(rèn)第三方庫(kù) use_frameworks!

所以用cocoapods 導(dǎo)入swift 框架到swift項(xiàng)目和OC項(xiàng)目都必須要 use_frameworks!

二、創(chuàng)建橋接文件

橋接文件在首次創(chuàng)建swift文件時(shí)會(huì)自動(dòng)生成。如果不小心刪除后, 也可以手動(dòng)添加,不過(guò)名字必須是“ProjectName-Bridging-Header.h”頭文件(名稱(chēng)組成:工程名-Bridging-Header.h)。

橋接文件.png

創(chuàng)建一個(gè)Test.swift,根據(jù)提示創(chuàng)建好橋接文件,名稱(chēng)不要進(jìn)行改動(dòng):

image.png

創(chuàng)建好之后我們編譯一遍,看看項(xiàng)目會(huì)不會(huì)報(bào)錯(cuò)。(哈哈哈, 并沒(méi)有~~)這個(gè)時(shí)候,你可以把之前創(chuàng)建的swift文件刪除了。

三、測(cè)試集成是否成功

在需要繪制的界面導(dǎo)入我們的橋接文件和charts頭文件,直接創(chuàng)建一個(gè)折線圖。

測(cè)試.png
測(cè)試結(jié)果.png

由于沒(méi)有數(shù)據(jù),所以出現(xiàn)“No chart data avaliable”就代表集成好了。

四、繪制折線圖

集成好之后我們就正式開(kāi)始繪制折線圖了。

先進(jìn)行一些配置:
1、橋接文件里引入Charts;
2、Build Settings -> Packaging -> Defines Module ->Yes

設(shè)置1.png
設(shè)置2.png

導(dǎo)入頭文件 #import "TestPods-Swift.h"
1, 描述一個(gè)折線圖對(duì)象, 懶加載創(chuàng)建一下。

- (LineChartView *)lineChartView
{
   if (!_lineChartView)
   {
    _lineChartView = [[LineChartView alloc] init];
    _lineChartView.backgroundColor =  [UIColor whiteColor];
    _lineChartView.chartDescription.enabled = YES;
    _lineChartView.delegate = self;
    
    _lineChartView.scaleYEnabled = YES;         // 取消Y軸縮放
    _lineChartView.scaleXEnabled = NO;          // 取消X軸縮放
    _lineChartView.doubleTapToZoomEnabled = NO; // 取消雙擊縮放
    _lineChartView.dragEnabled = NO;            // 關(guān)閉拖拽圖標(biāo)
    _lineChartView.legend.enabled = NO;         // 關(guān)閉圖例顯示
    [_lineChartView setExtraOffsetsWithLeft:13 top:20 right:40 bottom:0];
    
    // 繪制
    _lineChartView.rightAxis.enabled = NO;          // 繪制右邊軸
    _lineChartView.leftAxis.enabled = NO;           // 繪制左邊軸
    
    // Y軸設(shè)置
    ChartYAxis *leftAxis = _lineChartView.leftAxis;
    [leftAxis setXOffset:15.0f];
    
    leftAxis.forceLabelsEnabled = YES;  // 強(qiáng)制繪制指定數(shù)量的label
    leftAxis.labelCount = 8;
    
    leftAxis.gridColor = [UIColor clearColor]; // 網(wǎng)格線顏色
    leftAxis.gridAntialiasEnabled = YES;       // 開(kāi)啟抗鋸齒
    leftAxis.inverted = NO;                    // 是否將Y軸進(jìn)行上下翻轉(zhuǎn)
    
    // X軸設(shè)置
    ChartXAxis *xAxis = _lineChartView.xAxis;
    xAxis.labelPosition = XAxisLabelPositionBottom; // 設(shè)置x軸數(shù)據(jù)在底部
    xAxis.axisLineColor = [UIColor clearColor];     // X軸顏色
    xAxis.granularityEnabled = YES;                 // 設(shè)置重復(fù)的值不顯示
    xAxis.gridColor = [UIColor clearColor];
    
    xAxis.labelTextColor =  UIColorFromHEXA(0xa7b0c2,1.0);    // 文字顏色
    NSNumberFormatter *xAxisFormatter = [[NSNumberFormatter alloc] init];
    xAxisFormatter.positiveSuffix = @":00";
    xAxisFormatter.positivePrefix = @"|";
    xAxis.valueFormatter = [[ChartDefaultAxisValueFormatter alloc] initWithFormatter:xAxisFormatter];
    
    // 能夠顯示的數(shù)據(jù)數(shù)量
    _lineChartView.maxVisibleCount = 999;
    
    // 展現(xiàn)動(dòng)畫(huà)
    [_lineChartView animateWithYAxisDuration:0.75f];
    
    // 設(shè)置選中時(shí)氣泡
    XYMarkerView *marker = [[XYMarkerView alloc] initWithColor:UIColorFromHEXA(0x00bcac,1.0) font:[UIFont systemFontOfSize:12.0]  textColor:UIColor.whiteColor insets:UIEdgeInsetsMake(3, 3, 16.0, 3) xAxisValueFormatter:_lineChartView.xAxis.valueFormatter];
    marker.chartView = _lineChartView;
    marker.minimumSize = CGSizeMake(30.0f, 15.0f);
    _lineChartView.marker = marker;
   }
  return _lineChartView;
}

2, 處理折線圖X軸,Y軸顯示的數(shù)據(jù)

      - (void)setLineChartWithXData:(NSArray *)xData yData:(NSArray *)yData
    {
     if (xData.count > 0)
     {
       //對(duì)應(yīng)Y軸上面需要顯示的數(shù)據(jù)
       NSMutableArray *yVals = [[NSMutableArray alloc] init];
    
       for (int i = 0; i < yData.count; I++)
      {
          ChartDataEntry *entry = [[ChartDataEntry alloc] initWithX:[xData[i] doubleValue] y:[yData[i] doubleValue]];
          [yVals addObject:entry];
        
          if (i == yData.count - 1)
          {
              self.contentLab.text = [NSString stringWithFormat:@"%g℃",entry.y];
          }
      }
    
      // 設(shè)置折線的樣式
      LineChartDataSet *set1 = [[LineChartDataSet alloc]initWithValues:yVals label:nil];
      set1.lineWidth = 1.0f;       // 折線寬度
      [set1 setColor:BtnBgColor];  // 折線顏色
      set1.drawValuesEnabled = NO; // 是否在拐點(diǎn)處顯示數(shù)據(jù)
    
      // 折線拐點(diǎn)樣式
      set1.drawCirclesEnabled = YES;      // 是否繪制拐點(diǎn)
      set1.drawFilledEnabled = NO;        // 是否填充顏色
      [set1 setCircleColor:BtnBgColor];   // 拐點(diǎn) 圓的顏色
      set1.circleRadius = 5.0f;
      set1.highlightColor = [UIColor clearColor];
    
      NSMutableArray *dataSets = [[NSMutableArray alloc] init];
      [dataSets addObject:set1];
    
      LineChartData *data = [[LineChartData alloc] initWithDataSets:dataSets];
      [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:11.0f]]; // 文字字體
      [data setValueTextColor:[UIColor blackColor]];                               // 文字顏色
    
      _lineChartView.data = data;
    
      [_lineChartView highlightValue: [[ChartHighlight alloc] initWithX:[xData[xData.count - 1] doubleValue] y:[yData[yData.count - 1] doubleValue] dataSetIndex:0 dataIndex:0]];
      }
    }

3,模擬真實(shí)數(shù)據(jù)

[self setLineChartWithXData:@[@"9:00",@"10:00",@"11:00",@"12:00",@"13:00",@"14:00"] yData:@[@"47",@"49",@"46",@"51",@"45",@"43"]];

4, 最終效果


效果.png

以上呢, 就是一個(gè)簡(jiǎn)單的折線圖的繪制過(guò)程了。
有需要的,可以直接下載Demo查看~
Demo地址(https://github.com/summersun08/ChartsTest.git

看在我這么可愛(ài)的份上, 喜歡就給我一個(gè)小心心了??????


給你一個(gè)小心心

——————————————————————————-

更新一個(gè)小細(xì)節(jié):

OC和Swift混編時(shí), import "工程名-swift.h"時(shí),總會(huì)提示這個(gè)".h Not Found"

這個(gè)問(wèn)題很好解決,

TARGET ->Build Settings-> Packaging -> Product Module Name , 刪掉默認(rèn)的,重新輸入工程名

之后clear工程, 重新運(yùn)行就好。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱(chēng)項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,211評(píng)論 3 119
  • 自從上次與胭脂不歡而散后,已經(jīng)幾日沒(méi)來(lái)留香院了。若不是為打聽(tīng)那人的事情,司徒存孝真是不愿意再看那女人的臉,想到她...
    梔九爺閱讀 600評(píng)論 8 9
  • 海棠吹落的時(shí)節(jié) 我從扶疏的青春里 打馬走過(guò) 穿過(guò) 熟悉的街道向晚 去聽(tīng) 一曲故鄉(xiāng)的歌謠 驀然回首的似水流年 ...
    安安Ann閱讀 340評(píng)論 0 0
  • 1、嘿嘿~大家好! 2、基本信息:原名陳端仁,廣東湛江人?,F(xiàn)就讀于廣東湛江嶺南師范學(xué)院,一名在校大學(xué)生。94年生人...
    端銀閱讀 577評(píng)論 0 0
  • 國(guó)奧越野08-09提高班訓(xùn)練總結(jié) 時(shí)間:2018-10--27-28 地點(diǎn):奧體中心訓(xùn)練場(chǎng)、寶聯(lián)體育公園 球隊(duì):0...
    魚(yú)越_02c9閱讀 274評(píng)論 0 0

友情鏈接更多精彩內(nèi)容