zoukankan      html  css  js  c++  java
  • iOS 中集成百度echarts3.0

    1. 突然项目中要用到图表,所以就用了百度的echarts,然后就是网上搜了一下,由于本人的JS不是很熟悉,但是研究了一下还是做出来了,其实也不是很难
    2. 最后做的效果大概如下图这种,由于界面上没调整,所以粗糙了一点
    3. 不多说 前端的代码如下
    4. <!DOCTYPE html>
      <html>
      <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
      
          <title>ECharts</title>
          <!-- 引入 echarts.js -->
          <script src="echarts.js"></script>
          <script type="text/javascript" language="javascript">
              var title = "";
              var subtext = "";
              var legendData;
              var xAxisData;
              var valueDate;
              var valueDateA;
              var valueDateB;
              var valueDateC;
              var subType;
              var series;
              var myChart = null;
              var option;
              
              function setLegendData(legendDat) {
                  legendData = legendDat;
              }
              function  setXAxisData(xAxisDat
                                     ){
                  xAxisData = xAxisDat;
              }
              function setValueDate(valueDat){
                  valueDate = valueDat;
              }
              function setValueDateA(valuedatA){
                  valueDateA = valuedatA;
              }
              function setValueDateB(valuedatB){
                  valueDateB = valuedatB;
              }
      
              function setValueDateC(valuedatC){
                  valueDateC = valuedatC;
              }
          
          function setSubType(type) {
              if(type == "I"){
                  legendData = new Array('A相电流','B相电流','C相电流');
                  series = [{
                            name:legendData[0],
                            type:'line',
                            data:valueDateA
                            },
                            {
                            name:legendData[1],
                            type:'line',
                            data:valueDateB
                            },
                            {
                            name:legendData[2],
                            type:'line',
                            data:valueDateC
                            },
                            ];
                            title = "电流曲线";
                            subtext = "单位(A)"
              }else if(type == "U"){
                  legendData = new Array('A相电压','B相电压','C相电压');
                  series = [{
                            name:legendData[0],
                            type:'line',
                            data:valueDateA
                            },
                            {
                            name:legendData[1],
                            type:'line',
                            data:valueDateB
                            },
                            {
                            name:legendData[2],
                            type:'line',
                            data:valueDateC
                            },
                            ];
                            title = "电压曲线";
                            subtext = "单位(V)"
              }else if(type == "P"){
                  legendData = new Array('总有功功率','A相有功功率','B相有功功率','C相有功功率');
                  series = [{
                            name:legendData[0],
                            type:'line',
                            data:valueDate
                            },
                            {
                            name:legendData[1],
                            type:'line',
                            data:valueDateA
                            },
                            {
                            name:legendData[2],
                            type:'line',
                            data:valueDateB
                            },
                            {
                            name:legendData[3],
                            type:'line',
                            data:valueDateC
                            }
                            ];
                            
                            title = "有功功率曲线";
                            subtext = "单位(kW)"
              }else if(type == "Q"){
                  legendData = new Array('总无功功率','A相无功功率','B相无功功率','C相无功功率');
                  series = [{
                            name:legendData[0],
                            type:'line',
                            data:valueDate
                            },
                            {
                            name:legendData[1],
                            type:'line',
                            data:valueDateA
                            },
                            {
                            name:legendData[2],
                            type:'line',
                            data:valueDateB
                            },
                            {
                            name:legendData[3],
                            type:'line',
                            data:valueDateC
                            }
                            ];
                            
                            title = "无功功率曲线";
                            subtext = "单位(kVar)"
              }else if(type == "S"){
                  legendData = new Array('总视在功率','A相视在功率','B相视在功率','C相视在功率');
                  series = [{
                            name:legendData[0],
                            type:'line',
                            data:valueDate
                            },
                            {
                            name:legendData[1],
                            type:'line',
                            data:valueDateA
                            },
                            {
                            name:legendData[2],
                            type:'line',
                            data:valueDateB
                            },
                            {
                            name:legendData[3],
                            type:'line',
                            data:valueDateC
                            }
                            ];
                            title = "视在功率曲线";
                            subtext = "单位(kW)"
                            
              }else if(type == "cos"){
                  legendData = new Array('总功率因数','A相功率因数','B相功率因数','C相功率因数');
                  series = [{
                            name:legendData[0],
                            type:'line',
                            data:valueDate
                            },
                            {
                            name:legendData[1],
                            type:'line',
                            data:valueDateA
                            },
                            {
                            name:legendData[2],
                            type:'line',
                            data:valueDateB
                            },
                            {
                            name:legendData[3],
                            type:'line',
                            data:valueDateC
                            }
                            ];
                            title = "视在功率曲线";
                            
              }
          }
          
          function update() {
              // 指定图表的配置项和数据
               option = {
                  
                  title: {
                      //            text: title,
                      subtext:subtext
                  },
                  toolbox: {
                      show: true,
                      feature: {
                          dataZoom: {
                              yAxisIndex: 'none'
                          },
                      }
                  },
                  tooltip: {
                      trigger: 'axis'
                  },
                  legend: {
                      data:legendData
                  },
                  
                  xAxis:  {
                      type: 'category',
                      boundaryGap: false,
                      data: xAxisData
                  },
                  yAxis: {
                      type: 'value',
                      axisLabel: {
                          formatter: '{value}'
                      }
                  },
                  series: series
              };
               myChart = echarts.init(document.getElementById('main'));
               myChart.setOption(option);
          }
          
          
          
        
          
          
          </script>
      </head>
      <body>
      <div id="main" style=" 100%;height:230px;"></div>
      <script type="text/javascript" language="javascript">
      
      </script>
      
      </body>
      </html>

      json 文件代码如下

    5. {
          "status": "1",
          "message": "成功",
          "data": [
              {
                  "p": "174",
                  "qb": "33",
                  "q": "39",
                  "qc": "50",
                  "ia": "27",
                  "fixTimeDate": "1490284800000",
                  "s": "127",
                  "cosb": "93",
                  "cos": "29",
                  "ib": "30",
                  "ua": "10720",
                  "ub": "10387",
                  "ic": "23",
                  "devId": "8a3ae71e5ac56347015ac6520afd0002",
                  "uc": "10646",
                  "id": "418A48AEDFAA4236854388B4F38D41F6",
                  "pa": "144",
                  "recTime": "1490284599000",
                  "sa": "137",
                  "cosc": "58",
                  "pb": "187",
                  "sb": "109",
                  "pc": "132",
                  "sc": "119",
                  "cosa": "20",
                  "qa": "31"
              },
              {
                  "p": "174",
                  "qb": "33",
                  "q": "39",
                  "qc": "50",
                  "ia": "27",
                  "fixTimeDate": "1490284800000",
                  "s": "127",
                  "cosb": "93",
                  "cos": "29",
                  "ib": "30",
                  "ua": "10720",
                  "ub": "10387",
                  "ic": "23",
                  "devId": "8a3ae71e5ac56347015ac6520afd0002",
                  "uc": "10646",
                  "id": "418A48AEDFAA4236854388B4F38D41F6",
                  "pa": "144",
                  "recTime": "1490284599000",
                  "sa": "137",
                  "cosc": "58",
                  "pb": "187",
                  "sb": "109",
                  "pc": "132",
                  "sc": "119",
                  "cosa": "20",
                  "qa": "31"
              },
              {
                  "p": "174",
                  "qb": "33",
                  "q": "39",
                  "qc": "50",
                  "ia": "27",
                  "fixTimeDate": "1490284800000",
                  "s": "127",
                  "cosb": "93",
                  "cos": "29",
                  "ib": "30",
                  "ua": "10720",
                  "ub": "10387",
                  "ic": "23",
                  "devId": "8a3ae71e5ac56347015ac6520afd0002",
                  "uc": "10646",
                  "id": "418A48AEDFAA4236854388B4F38D41F6",
                  "pa": "144",
                  "recTime": "1490284599000",
                  "sa": "137",
                  "cosc": "58",
                  "pb": "187",
                  "sb": "109",
                  "pc": "132",
                  "sc": "119",
                  "cosa": "20",
                  "qa": "31"
              },
              {
                  "p": "174",
                  "qb": "33",
                  "q": "39",
                  "qc": "50",
                  "ia": "27",
                  "fixTimeDate": "1490284800000",
                  "s": "127",
                  "cosb": "93",
                  "cos": "29",
                  "ib": "30",
                  "ua": "10720",
                  "ub": "10387",
                  "ic": "23",
                  "devId": "8a3ae71e5ac56347015ac6520afd0002",
                  "uc": "10646",
                  "id": "418A48AEDFAA4236854388B4F38D41F6",
                  "pa": "144",
                  "recTime": "1490284599000",
                  "sa": "137",
                  "cosc": "58",
                  "pb": "187",
                  "sb": "109",
                  "pc": "132",
                  "sc": "119",
                  "cosa": "20",
                  "qa": "31"
              }
          ]
      }

      这里做的只是一个测试项目 ,所以json 里面的数据都是一样的

    6. 控制器中设立了一个表格 然后读取本地的数据
    7. #import "ViewController.h"
      #import "HistoryDateCell.h"
      #import "HistoryDateModel.h"
      #import "MJExtension.h"
      @interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
      /** 表格 */
      @property(strong,nonatomic) UITableView *tableView;
      @property(strong,nonatomic) NSArray *historyArray;
      
      @end
      
      @implementation ViewController
      static NSString *HistoryDateCellID = @"HistoryDateCellId";
      
      - (void)viewDidLoad {
          [super viewDidLoad];
          [self setupTableView];
          [self initJson];
          
      }
      
      
      #pragma mark - JSON 解析
      -(void)initJson{
          NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"json"];
          NSData *jdata = [[NSData alloc]initWithContentsOfFile:filePath];
      
          NSDictionary *hisDict = [NSJSONSerialization JSONObjectWithData:jdata options:kNilOptions error:nil];
          self.historyArray = [HistoryDateModel mj_objectArrayWithKeyValuesArray:hisDict[@"data"]];
      }
      
      #pragma mark - 设置表格
      -(void)setupTableView{
          self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
          for (UIView *subView in self.tableView.subviews) {
              if ([subView isKindOfClass:[UIScrollView class]]) {
                  ((UIScrollView *)subView).delaysContentTouches = NO;
              }
          }
          self.tableView.delaysContentTouches = NO;
          
          self.tableView.delegate = self;
          self.tableView.dataSource = self;
          [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([HistoryDateCell class]) bundle:nil] forCellReuseIdentifier:HistoryDateCellID];
          
          [self.view addSubview:self.tableView];
      
      
      
      }
      - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
          return 1;
      }
      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
          HistoryDateCell *cell = [tableView dequeueReusableCellWithIdentifier:HistoryDateCellID];
          cell.historyDate = self.historyArray;
          cell.selectionStyle = UITableViewCellSelectionStyleNone;
          return cell;
      }
      -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
          return 320;
      
      }
      
      -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
          [tableView deselectRowAtIndexPath:indexPath animated:YES];
      }
      
      
      - (void)didReceiveMemoryWarning {
          [super didReceiveMemoryWarning];
          // Dispose of any resources that can be recreated.
      }
      
      
      @end

      然后 话折线图的代码 都放在自定义cell 的代码里面,具体如下,我这里是对传入的参数进行了分类 真正测试的话不会有这个复杂,并且我用的是wkwebview,这个的内存泄露没UIwebview那么严重,所以就用了这个

    #import "HistoryDateCell.h"
    #import "HistoryDateModel.h"
    #import <WebKit/WebKit.h>
    #import "TimeTools.h"
    
    #define BTN_BACKCOLOR JdryRGBColorAlpha(25, 180, 212, 0.2)
    #define SELECTBTN_BACKCOLOR JdryColorFromHex(0xFFFFFF)
    /* 颜色进行宏定义 */
    #define JdryColorFromHex(s)  [UIColor colorWithRed:(((s & 0xFF0000) >> 16))/255.0 green:(((s &0xFF00) >>8))/255.0 blue:((s &0xFF))/255.0 alpha:1.0]
    #define JdryRGBColor(r,g,b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
    #define JdryRGBColorAlpha(r,g,b,a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:a];
    #define BACK_COLOR JdryColorFromHex(0xE8F0F2)
    #define BLUE_COLOR JdryColorFromHex(0x19B5D4)
    #define RED_COLOR JdryColorFromHex(0xF95656)
    
    /* 获取设备屏幕的大小 */
    #define JdryScreeWidth [UIScreen mainScreen].bounds.size.width
    #define JdryScreeHeight [UIScreen mainScreen].bounds.size.height
    #define JdryScreeBounds [UIScreen mainScreen].bounds
    @interface HistoryDateCell ()<WKNavigationDelegate>
    @property (weak, nonatomic) IBOutlet UIButton *dayBtn;
    @property (weak, nonatomic) IBOutlet UIButton *monthBtn;
    @property (weak, nonatomic) IBOutlet UIButton *yearBtn;
    /** echart */
    @property(strong,nonatomic) WKWebView *wkWebView;
    /** xAxisData */
    @property(strong,nonatomic) NSString *xAxisData;
    /** 总 */
    @property(strong,nonatomic) NSMutableString *valueDat;
    /** A */
    @property(strong,nonatomic) NSMutableString *valueDatA;
    /** B */
    @property(strong,nonatomic) NSMutableString *valueDatB;
    /** C */
    @property(strong,nonatomic) NSMutableString *valueDatC;
    /** X轴 */
    @property(strong,nonatomic) NSMutableString *xAxis;
    
    @end
    
    @implementation HistoryDateCell
    
    - (void)awakeFromNib {
        [super awakeFromNib];
     
        self.xAxis = [NSMutableString string];
        [self setEcharts:self.webContentView];
    }
    
    -(void)setHistoryDate:(NSArray *)historyDate{
        _historyDate = historyDate;
        self.subType = @"cos";
        self.timeType = @"2";
        [self selectSubType:self.subType timeType:_timeType];
    }
    
    -(void)selectSubType:(NSString *)subType timeType:(NSString *)timeType{
        self.valueDat = [NSMutableString string];
        self.valueDatA = [NSMutableString string];
        self.valueDatB = [NSMutableString string];
        self.valueDatC = [NSMutableString string];
        
        if ([subType isEqualToString:@"I"]) {
            for (HistoryDateModel *model in _historyDate) {
                [_valueDatA appendString:[NSString stringWithFormat:@"'%@',",model.ia]];
                [_valueDatB appendString:[NSString stringWithFormat:@"'%@',",model.ib]];
                [_valueDatC appendString:[NSString stringWithFormat:@"'%@',",model.ic]];
            }
        }else if ([subType isEqualToString:@"U"]){
            for (HistoryDateModel *model in _historyDate) {
                [_valueDatA appendString:[NSString stringWithFormat:@"'%@',",model.ua]];
                [_valueDatB appendString:[NSString stringWithFormat:@"'%@',",model.ub]];
                [_valueDatC appendString:[NSString stringWithFormat:@"'%@',",model.uc]];
            }
        }else if ([subType isEqualToString:@"P"]){
            for (HistoryDateModel *model in _historyDate) {
                [_valueDat appendString:[NSString stringWithFormat:@"'%@',",model.p]];
                [_valueDatA appendString:[NSString stringWithFormat:@"'%@',",model.pa]];
                [_valueDatB appendString:[NSString stringWithFormat:@"'%@',",model.pb]];
                [_valueDatC appendString:[NSString stringWithFormat:@"'%@',",model.pc]];
            }
        }else if ([subType isEqualToString:@"Q"]){
            for (HistoryDateModel *model in _historyDate) {
                [_valueDat appendString:[NSString stringWithFormat:@"'%@',",model.q]];
                [_valueDatA appendString:[NSString stringWithFormat:@"'%@',",model.qa]];
                [_valueDatB appendString:[NSString stringWithFormat:@"'%@',",model.qb]];
                [_valueDatC appendString:[NSString stringWithFormat:@"'%@',",model.qc]];
            }
        }else if ([subType isEqualToString:@"S"]){
            for (HistoryDateModel *model in _historyDate) {
                [_valueDat appendString:[NSString stringWithFormat:@"'%@',",model.s]];
                [_valueDatA appendString:[NSString stringWithFormat:@"'%@',",model.sa]];
                [_valueDatB appendString:[NSString stringWithFormat:@"'%@',",model.sb]];
                [_valueDatC appendString:[NSString stringWithFormat:@"'%@',",model.sc]];
            }
        }else if ([subType isEqualToString:@"cos"]){
            for (HistoryDateModel *model in _historyDate) {
                [_valueDat appendString:[NSString stringWithFormat:@"'%@',",model.cos]];
                [_valueDatA appendString:[NSString stringWithFormat:@"'%@',",model.cosa]];
                [_valueDatB appendString:[NSString stringWithFormat:@"'%@',",model.cosb]];
                [_valueDatC appendString:[NSString stringWithFormat:@"'%@',",model.cosc]];
            }
        }
        
        for (HistoryDateModel *model in _historyDate) {
            if ([timeType isEqualToString:@"0"]) {
                [_xAxis appendString:[NSString stringWithFormat:@"'%@',",[TimeTools timeWithDateAndHourAndMIn:model.fixTimeDate]]];
            }else if ([timeType isEqualToString:@"1"]){
                [_xAxis appendString:[NSString stringWithFormat:@"'%@',",[TimeTools timeWithDayAndMonthString:model.fixTimeDate]]];
            }else if ([timeType isEqualToString:@"2"]){
                [_xAxis appendString:[NSString stringWithFormat:@"'%@月',",[TimeTools timeWithDateAndMonth:model.fixTimeDate]]];
            }
            
        }
        
        
        if (![subType isEqualToString:@"I"] && ![subType isEqualToString:@"U"]) {
            [_valueDat deleteCharactersInRange:NSMakeRange(_valueDat.length -1, 1)];
        }
        [_valueDatA deleteCharactersInRange:NSMakeRange(_valueDatA.length -1, 1)];
        [_valueDatB deleteCharactersInRange:NSMakeRange(_valueDatB.length -1, 1)];
        [_valueDatC deleteCharactersInRange:NSMakeRange(_valueDatC.length -1, 1)];
        [_xAxis deleteCharactersInRange:NSMakeRange(_xAxis.length -1, 1)];
    }
    
    #pragma mark - 设置echarts
    -(void)setEcharts:(UIView *)contentView{
        NSString *path = [[NSBundle mainBundle] pathForResource:@"HistoryData" ofType:@"html"];
        self.wkWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, JdryScreeWidth - 30, 406)];
        if(path){
            if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {
                NSURL *fileURL = [NSURL fileURLWithPath:path];
                [self.wkWebView loadFileURL:fileURL allowingReadAccessToURL:fileURL];
            } else {
                NSURL *fileURL = [self fileURLForBuggyWKWebView8:[NSURL fileURLWithPath:path]];
                NSURLRequest *request = [NSURLRequest requestWithURL:fileURL];
                [self.wkWebView loadRequest:request];
            }
        }
        self.wkWebView.navigationDelegate = self;
        [contentView addSubview: self.wkWebView];
    }
    
    - (NSURL *)fileURLForBuggyWKWebView8:(NSURL *)fileURL {
        NSError *error = nil;
        if (!fileURL.fileURL || ![fileURL checkResourceIsReachableAndReturnError:&error]) {
            return nil;
        }
        // Create "/temp/www" directory
        NSFileManager *fileManager= [NSFileManager defaultManager];
        NSURL *temDirURL = [[NSURL fileURLWithPath:NSTemporaryDirectory()] URLByAppendingPathComponent:@"www"];
        [fileManager createDirectoryAtURL:temDirURL withIntermediateDirectories:YES attributes:nil error:&error];
        
        NSURL *dstURL = [temDirURL URLByAppendingPathComponent:fileURL.lastPathComponent];
        // Now copy given file to the temp directory
        [fileManager removeItemAtURL:dstURL error:&error];
        [fileManager copyItemAtURL:fileURL toURL:dstURL error:&error];
        // Files in "/temp/www" load flawlesly :)
        return dstURL;
    }
    
    -(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
    
        [self.wkWebView evaluateJavaScript:[NSString stringWithFormat:@"setValueDate([%@])",_valueDat] completionHandler:^(id dict, NSError * error) {
            NSLog(@"%@",error);
    
        }];
        
        [self.wkWebView evaluateJavaScript:[NSString stringWithFormat:@"setValueDateA([%@])",_valueDatA] completionHandler:^(id dict, NSError * error) {
            NSLog(@"%@",error);
    
        }];
        
        [self.wkWebView evaluateJavaScript:[NSString stringWithFormat:@"setValueDateB([%@])",_valueDatB]completionHandler:^(id dict, NSError * error) {
            NSLog(@"%@",error);
    
        }];
        
        [self.wkWebView evaluateJavaScript:[NSString stringWithFormat:@"setValueDateC([%@])",_valueDatC] completionHandler:^(id dict, NSError * error) {
            NSLog(@"%@",error);
    
        }];
        
        [self.wkWebView evaluateJavaScript:[NSString stringWithFormat:@"setXAxisData([%@])",_xAxis]
    completionHandler:^(id dict, NSError * error) {
            NSLog(@"%@",error);
            
        }];
    
        [self.wkWebView evaluateJavaScript:[NSString stringWithFormat:@"setSubType('%@')",self.subType]
     completionHandler:^(id dict, NSError * error) {
        
            
        
            NSLog(@"%@",error);
    
        }];
        [self.wkWebView evaluateJavaScript:@"update()" completionHandler:^(id dict, NSError * error) {
            NSLog(@"%@",error);
            
        }];
      
       
    }
    
    -(void)setFrame:(CGRect)frame{
        frame.origin.y = frame.origin.y += 10;
        frame.size.height = frame.size.height -= 10;
        
        [super setFrame:frame];
    }
    
    - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
        [super setSelected:selected animated:animated];
    
        // Configure the view for the selected state
    }
    - (IBAction)selectDay:(UIButton *)sender {
        sender.backgroundColor = SELECTBTN_BACKCOLOR;
        self.monthBtn.backgroundColor = BTN_BACKCOLOR;
        self.yearBtn.backgroundColor = BTN_BACKCOLOR;
    }
    
    
    - (IBAction)selectMonth:(UIButton *)sender {
        sender.backgroundColor = SELECTBTN_BACKCOLOR;
        self.dayBtn.backgroundColor = BTN_BACKCOLOR;
        self.yearBtn.backgroundColor = BTN_BACKCOLOR;
    }
    
    
    - (IBAction)selectYear:(UIButton *)sender {
        sender.backgroundColor = SELECTBTN_BACKCOLOR;
        self.monthBtn.backgroundColor = BTN_BACKCOLOR;
        self.dayBtn.backgroundColor = BTN_BACKCOLOR;
    }
    
    @end
  • 相关阅读:
    F
    D
    J
    M
    H
    L
    Android线程之间的通讯
    Java4Android基础学习之异常
    Java4Android基础学习之接口
    Java4Android基础学习之包与访问权限
  • 原文地址:https://www.cnblogs.com/qianLL/p/6624623.html
Copyright © 2011-2022 走看看