From d1cf320dd73878cd60a7110b5481d5d388eb3b81 Mon Sep 17 00:00:00 2001 From: An An <2236368544@qq.com> Date: Fri, 22 Nov 2024 10:56:56 +0800 Subject: [PATCH 001/107] Add TripleChartsLinkedWorkVC --- AAInfographicsDemo.xcodeproj/project.pbxproj | 12 ++ .../AdvancedFeaturesListVC.swift | 9 +- ...tionBeforeAndAfterRenderingComposer3.swift | 91 ++++++++ .../synchronizedChartActivityData.json | 22 ++ .../TripleChartsLinkedWorkVC.swift | 196 ++++++++++++++++++ 5 files changed, 328 insertions(+), 2 deletions(-) create mode 100644 AAInfographicsDemo/Demo/AAOptionsWithJS/JSFunctionBeforeAndAfterRenderingComposer3.swift create mode 100644 AAInfographicsDemo/Demo/AAOptionsWithJS/synchronizedChartActivityData.json create mode 100644 AAInfographicsDemo/Demo/AdditionalContent1/TripleChartsLinkedWorkVC.swift diff --git a/AAInfographicsDemo.xcodeproj/project.pbxproj b/AAInfographicsDemo.xcodeproj/project.pbxproj index 756a7aac..eb4c4f6b 100644 --- a/AAInfographicsDemo.xcodeproj/project.pbxproj +++ b/AAInfographicsDemo.xcodeproj/project.pbxproj @@ -72,6 +72,9 @@ 844F11402B635C9900ADEB1C /* JSFunctionForAAChartEventsVC2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844F113F2B635C9900ADEB1C /* JSFunctionForAAChartEventsVC2.swift */; }; 844F11462B689B8600ADEB1C /* CustomXAxisLabelsClickEventCallbackVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844F11452B689B8600ADEB1C /* CustomXAxisLabelsClickEventCallbackVC.swift */; }; 844F11482B6B3F2100ADEB1C /* CustomStyleForLineChartComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844F11472B6B3F2100ADEB1C /* CustomStyleForLineChartComposer.swift */; }; + 84526E252CF0210500EB2563 /* synchronizedChartActivityData.json in Resources */ = {isa = PBXBuildFile; fileRef = 84526E242CF0210500EB2563 /* synchronizedChartActivityData.json */; }; + 84526E272CF0212000EB2563 /* JSFunctionBeforeAndAfterRenderingComposer3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84526E262CF0212000EB2563 /* JSFunctionBeforeAndAfterRenderingComposer3.swift */; }; + 84526E292CF0228300EB2563 /* TripleChartsLinkedWorkVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84526E282CF0228300EB2563 /* TripleChartsLinkedWorkVC.swift */; }; 84595DE82B4698D600F69273 /* PolarChartOptionsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84595DE72B4698D600F69273 /* PolarChartOptionsVC.swift */; }; 84595DEA2B46A94C00F69273 /* AAOptionsListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84595DE92B46A94C00F69273 /* AAOptionsListVC.swift */; }; 84595DEC2B46B34E00F69273 /* AAOptionsWithJSListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84595DEB2B46B34E00F69273 /* AAOptionsWithJSListVC.swift */; }; @@ -283,6 +286,9 @@ 844F113F2B635C9900ADEB1C /* JSFunctionForAAChartEventsVC2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSFunctionForAAChartEventsVC2.swift; sourceTree = ""; }; 844F11452B689B8600ADEB1C /* CustomXAxisLabelsClickEventCallbackVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CustomXAxisLabelsClickEventCallbackVC.swift; path = AAInfographicsDemo/Demo/BackUpContent/CustomXAxisLabelsClickEventCallbackVC.swift; sourceTree = SOURCE_ROOT; }; 844F11472B6B3F2100ADEB1C /* CustomStyleForLineChartComposer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomStyleForLineChartComposer.swift; sourceTree = ""; }; + 84526E242CF0210500EB2563 /* synchronizedChartActivityData.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = synchronizedChartActivityData.json; sourceTree = ""; }; + 84526E262CF0212000EB2563 /* JSFunctionBeforeAndAfterRenderingComposer3.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSFunctionBeforeAndAfterRenderingComposer3.swift; sourceTree = ""; }; + 84526E282CF0228300EB2563 /* TripleChartsLinkedWorkVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TripleChartsLinkedWorkVC.swift; sourceTree = ""; }; 84595DE72B4698D600F69273 /* PolarChartOptionsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PolarChartOptionsVC.swift; sourceTree = ""; }; 84595DE92B46A94C00F69273 /* AAOptionsListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AAOptionsListVC.swift; sourceTree = ""; }; 84595DEB2B46B34E00F69273 /* AAOptionsWithJSListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AAOptionsWithJSListVC.swift; sourceTree = ""; }; @@ -358,6 +364,7 @@ children = ( 2770FBBE1F93673700091C75 /* OnlyRefreshChartDataVC.swift */, 276A56FE22C77228007F53E7 /* DoubleChartsLinkedWorkVC.swift */, + 84526E282CF0228300EB2563 /* TripleChartsLinkedWorkVC.swift */, 277066102452E99C00C4581D /* ScrollableChartVC.swift */, 449A0ED52377149D009F8FE1 /* ScrollingUpdateDataVC.swift */, 2763384424A7070F00143B9B /* DataSortingWithAnimationChartVC.swift */, @@ -567,6 +574,8 @@ 84086B2028E6F499006BD30D /* JSFunctionForAAOptionsVC.swift */, 58603418B60256899DD8BF75 /* JSFunctionForAAChartEventsComposer2.swift */, 84790F4D2CCF2D2C0047C133 /* JSFunctionBeforeAndAfterRenderingComposer.swift */, + 84526E262CF0212000EB2563 /* JSFunctionBeforeAndAfterRenderingComposer3.swift */, + 84526E242CF0210500EB2563 /* synchronizedChartActivityData.json */, ); path = AAOptionsWithJS; sourceTree = ""; @@ -818,6 +827,7 @@ 848FEAF8265DF5D3006E4F25 /* TestAAChartViewForXibVC.xib in Resources */, 84086B1F28E6C612006BD30D /* CustomTableViewCell.xib in Resources */, 278C54B71EE9472300770B97 /* Main.storyboard in Resources */, + 84526E252CF0210500EB2563 /* synchronizedChartActivityData.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -883,6 +893,7 @@ 448330B824E270FE00368A30 /* AdvancedUpdatingFeatureVC.swift in Sources */, 84E68FBD2B50E02E00CD8B2D /* CustomStyleForPieChartVC.swift in Sources */, 8418479928B8755900094106 /* JSFunctionForAAChartEventsVC.swift in Sources */, + 84526E292CF0228300EB2563 /* TripleChartsLinkedWorkVC.swift in Sources */, 27E475F924B83AE200690657 /* AABaseChartVC.swift in Sources */, 277066112452E99C00C4581D /* ScrollableChartVC.swift in Sources */, 84790F3F2CBF73360047C133 /* CustomTooltipClickEventCallbackVC.swift in Sources */, @@ -920,6 +931,7 @@ 58603456B9A269D72A0F9656 /* PieChartOptionsComposer.swift in Sources */, 586035AD1F2AA0AF6BFBDA7D /* LineChartOptionsVC.swift in Sources */, 2DC11BB34BC87432BF593AC8 /* BubbleLegendChartOptionsComposer.swift in Sources */, + 84526E272CF0212000EB2563 /* JSFunctionBeforeAndAfterRenderingComposer3.swift in Sources */, 58603B0D623EDFE55CFFC66B /* CustomStyleForColumnChartComposer.swift in Sources */, 844007702B6F37180072FB66 /* CustomStyleForBubbleChartComposer.swift in Sources */, 586031CD65041F30252BD805 /* CustomStyleForBarChartComposer.swift in Sources */, diff --git a/AAInfographicsDemo/Demo/AAChartListVC/AdvancedFeaturesListVC.swift b/AAInfographicsDemo/Demo/AAChartListVC/AdvancedFeaturesListVC.swift index 02638702..3683fa8b 100644 --- a/AAInfographicsDemo/Demo/AAChartListVC/AdvancedFeaturesListVC.swift +++ b/AAInfographicsDemo/Demo/AAChartListVC/AdvancedFeaturesListVC.swift @@ -51,7 +51,8 @@ class AdvancedFeaturesListVC: AABaseListVC { /*Show double chart as the same time*/ [ "在同一个页面同时添加多个 AAChartView", - " Double Charts Linkedwork 双表联动", + "Double Charts Linkedwork 双表联动", + "Triple Charts Linkedwork 三表联动", ], /*Animation types*/ [ "Column Chart---柱形图", @@ -265,10 +266,14 @@ extension AdvancedFeaturesListVC { let vc = ShowManyChartViewVC() vc.hidesBottomBarWhenPushed = true navigationController?.pushViewController(vc, animated: true) - } else { + } else if indexPath.row == 1 { let vc = DoubleChartsLinkedWorkVC() vc.hidesBottomBarWhenPushed = true navigationController?.pushViewController(vc, animated: true) + } else { + let vc = TripleChartsLinkedWorkVC() + vc.hidesBottomBarWhenPushed = true + navigationController?.pushViewController(vc, animated: true) } case 2: diff --git a/AAInfographicsDemo/Demo/AAOptionsWithJS/JSFunctionBeforeAndAfterRenderingComposer3.swift b/AAInfographicsDemo/Demo/AAOptionsWithJS/JSFunctionBeforeAndAfterRenderingComposer3.swift new file mode 100644 index 00000000..e15f8fe1 --- /dev/null +++ b/AAInfographicsDemo/Demo/AAOptionsWithJS/JSFunctionBeforeAndAfterRenderingComposer3.swift @@ -0,0 +1,91 @@ +// +// JSFunctionBeforeAndAfterRenderingComposer3.swift +// AAInfographicsDemo +// +// Created by AnAn on 2024/11/22. +// Copyright © 2024 An An. All rights reserved. +// + + +import AAInfographics + +class JSFunctionBeforeAndAfterRenderingComposer3 { + + static func getJsonData(jsonFileName: String) -> Any? { + guard let path = Bundle.main.path(forResource: jsonFileName, ofType: "json"), + let jsonData = try? Data(contentsOf: URL(fileURLWithPath: path)) else { + print("失败❌❌❌ 📃JSON文件\(jsonFileName)解码失败") + return nil + } + + do { + let jsonObj = try JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) + print("成功🔥🔥🔥 📃JSON文件\(jsonFileName)解码成功") + return jsonObj + } catch { + print("失败❌❌❌ 📃JSON文件\(jsonFileName)解码失败") + return nil + } + } + +/** + + (NSArray *)configureSeriesArray { + // Get the data + NSDictionary *activityDic = [self getJsonDataWithJsonFileName:@"synchronizedChartActivityData"]; + NSArray *datasets = activityDic[@"datasets"]; + + NSMutableArray *finalDatasets = [NSMutableArray array]; + NSArray *colorsArr = @[@"#1e90ff", @"#ef476f", @"#ffd066", @"#04d69f", @"#25547c"]; + //Loop the data sets and create one chart each + [datasets enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + // Add X values + NSDictionary *dataset = (NSDictionary *)obj; + NSArray *data = dataset[@"data"]; + NSMutableArray *newData = [NSMutableArray array]; + for (int i = 0; i < data.count; i++) { + NSArray *val = data[i]; + NSArray *xData = activityDic[@"xData"]; + newData[i] = @[xData[i], val]; + } + + AASeriesElement *seriesElement = AASeriesElement.new + .data(newData) + .name(dataset[@"name"]) + .type(AAChartTypeArea) + .color(colorsArr[idx]); + + finalDatasets[idx] = seriesElement; + }]; + + return finalDatasets; + } + */ + static func configureSeriesArray() -> [AASeriesElement] { + let activityDic = getJsonData(jsonFileName: "synchronizedChartActivityData") as! [String: Any] + let datasets = activityDic["datasets"] as! [[String: Any]] + + var finalDatasets = [AASeriesElement]() + let colorsArr = ["#1e90ff", "#ef476f", "#ffd066", "#04d69f", "#25547c"] + + datasets.enumerated().forEach { (idx, obj) in + let dataset = obj + let data = dataset["data"] as! [Any] + var newData = [[Any]]() + for i in 0.. String { + let defaultSelectedIndex = (message.index ?? 0) as Int + let jsFunc = """ + function syncRefreshTooltip() { + const points = []; + const chart = aaGlobalChart; + const series = chart.series; + const length = series.length; + + for (let i = 0; i < length; i++) { + const pointElement = series[i].data[\(defaultSelectedIndex)]; + points.push(pointElement); + } + chart.xAxis[0].drawCrosshair(null, points[0]); + chart.tooltip.refresh(points); + } + syncRefreshTooltip(); + """ + return jsFunc +} +} + + +extension TripleChartsLinkedWorkVC: AAChartViewDelegate { + func aaChartViewDidFinishLoad(_ aaChartView: AAChartView) { + print("🚀🚀🚀 AAChartView content did finish load!!!") + } + + func aaChartView(_ aaChartView: AAChartView, moveOverEventMessage: AAMoveOverEventMessageModel) { + let message = moveOverEventMessage + print("📊📊📊move over event message: \(message.name ?? "")") + if aaChartView == aaChartView1 { + aaChartView2.aa_evaluateJavaScriptStringFunction(configureSyncRefreshTooltipJSString(message: message)) + aaChartView3.aa_evaluateJavaScriptStringFunction(configureSyncRefreshTooltipJSString(message: message)) + } else if aaChartView == aaChartView2 { + aaChartView1.aa_evaluateJavaScriptStringFunction(configureSyncRefreshTooltipJSString(message: message)) + aaChartView3.aa_evaluateJavaScriptStringFunction(configureSyncRefreshTooltipJSString(message: message)) + } else if aaChartView == aaChartView3 { + aaChartView1.aa_evaluateJavaScriptStringFunction(configureSyncRefreshTooltipJSString(message: message)) + aaChartView2.aa_evaluateJavaScriptStringFunction(configureSyncRefreshTooltipJSString(message: message)) + } + } +} From e6c3620fc6636ad874a6c1bf0a8ef04932f4777e Mon Sep 17 00:00:00 2001 From: An An <2236368544@qq.com> Date: Fri, 22 Nov 2024 11:09:25 +0800 Subject: [PATCH 002/107] Update TripleChartsLinkedWorkVC.swift --- .../TripleChartsLinkedWorkVC.swift | 99 ++++++------------- 1 file changed, 32 insertions(+), 67 deletions(-) diff --git a/AAInfographicsDemo/Demo/AdditionalContent1/TripleChartsLinkedWorkVC.swift b/AAInfographicsDemo/Demo/AdditionalContent1/TripleChartsLinkedWorkVC.swift index e5e31642..6a99e8ab 100644 --- a/AAInfographicsDemo/Demo/AdditionalContent1/TripleChartsLinkedWorkVC.swift +++ b/AAInfographicsDemo/Demo/AdditionalContent1/TripleChartsLinkedWorkVC.swift @@ -10,11 +10,10 @@ import UIKit import AAInfographics class TripleChartsLinkedWorkVC: UIViewController { - var aaChartView1: AAChartView! var aaChartView2: AAChartView! var aaChartView3: AAChartView! - + override func viewDidLoad() { super.viewDidLoad() self.title = "Triple Charts Linked Work---3表联动" @@ -24,7 +23,7 @@ class TripleChartsLinkedWorkVC: UIViewController { setUpTheAAChartView2() setUpTheAAChartView3() } - + // 配置第 1 个 AAChartView func setUpTheAAChartView1() { let chartViewWidth = self.view.frame.size.width @@ -35,7 +34,6 @@ class TripleChartsLinkedWorkVC: UIViewController { self.view.addSubview(aaChartView1) self.aaChartView1 = aaChartView1 self.aaChartView1.delegate = self -// setupChartViewHandler() let aaOptions1 = AAOptions() .title(AATitle() @@ -55,7 +53,7 @@ class TripleChartsLinkedWorkVC: UIViewController { aaChartView1.aa_drawChartWithChartOptions(aaOptions1) } - + // 配置第 2 个 AAChartView func setUpTheAAChartView2() { let chartViewWidth = self.view.frame.size.width @@ -66,7 +64,6 @@ class TripleChartsLinkedWorkVC: UIViewController { self.view.addSubview(aaChartView2) self.aaChartView2 = aaChartView2 self.aaChartView2.delegate = self -// setupChartViewHandler2() let aaOptions2 = AAOptions() .title(AATitle() @@ -86,7 +83,7 @@ class TripleChartsLinkedWorkVC: UIViewController { aaChartView2.aa_drawChartWithChartOptions(aaOptions2) } - + // 配置第 3 个 AAChartView func setUpTheAAChartView3() { let chartViewWidth = self.view.frame.size.width @@ -97,7 +94,6 @@ class TripleChartsLinkedWorkVC: UIViewController { self.view.addSubview(aaChartView3) self.aaChartView3 = aaChartView3 self.aaChartView3.delegate = self -// setupChartViewHandler3() let aaOptions3 = AAOptions() .title(AATitle() @@ -117,60 +113,28 @@ class TripleChartsLinkedWorkVC: UIViewController { aaChartView3.aa_drawChartWithChartOptions(aaOptions3) } - -// func setupChartViewHandler() { -// weak var weakSelf = self -// aaChartView1.moveOverEventHandler { (aaChartView, message) in -// guard let weakSelf = weakSelf else { return } -// let jsFunc = weakSelf.configureSyncRefreshTooltipJSString(message: message) -// print("📊chart view 1 mouse over event message: \(message.name ?? "")") -// weakSelf.aaChartView2.aa_evaluateJavaScriptStringFunction(jsFunc) -// weakSelf.aaChartView3.aa_evaluateJavaScriptStringFunction(jsFunc) -// } -// } -// -// func setupChartViewHandler2() { -// weak var weakSelf = self -// aaChartView2.moveOverEventHandler { (aaChartView, message) in -// guard let weakSelf = weakSelf else { return } -// let jsFunc = weakSelf.configureSyncRefreshTooltipJSString(message: message) -// print("📊chart view 2 mouse over event message: \(message.name ?? "")") -// weakSelf.aaChartView1.aa_evaluateJavaScriptStringFunction(jsFunc) -// weakSelf.aaChartView3.aa_evaluateJavaScriptStringFunction(jsFunc) -// } -// } -// -// func setupChartViewHandler3() { -// weak var weakSelf = self -// aaChartView3.moveOverEventHandler { (aaChartView, message) in -// guard let weakSelf = weakSelf else { return } -// let jsFunc = weakSelf.configureSyncRefreshTooltipJSString(message: message) -// print("📊chart view 3 mouse over event message: \(message.name ?? "")") -// weakSelf.aaChartView1.aa_evaluateJavaScriptStringFunction(jsFunc) -// weakSelf.aaChartView2.aa_evaluateJavaScriptStringFunction(jsFunc) -// } -// } - - func configureSyncRefreshTooltipJSString(message: AAMoveOverEventMessageModel) -> String { - let defaultSelectedIndex = (message.index ?? 0) as Int - let jsFunc = """ - function syncRefreshTooltip() { - const points = []; - const chart = aaGlobalChart; - const series = chart.series; - const length = series.length; - - for (let i = 0; i < length; i++) { - const pointElement = series[i].data[\(defaultSelectedIndex)]; - points.push(pointElement); - } - chart.xAxis[0].drawCrosshair(null, points[0]); - chart.tooltip.refresh(points); + + + func configureSyncRefreshTooltipJSString(message: AAMoveOverEventMessageModel) -> String { + let defaultSelectedIndex = (message.index ?? 0) as Int + let jsFunc = """ + function syncRefreshTooltip() { + const points = []; + const chart = aaGlobalChart; + const series = chart.series; + const length = series.length; + + for (let i = 0; i < length; i++) { + const pointElement = series[i].data[\(defaultSelectedIndex)]; + points.push(pointElement); + } + chart.xAxis[0].drawCrosshair(null, points[0]); + chart.tooltip.refresh(points); + } + syncRefreshTooltip(); + """ + return jsFunc } - syncRefreshTooltip(); - """ - return jsFunc -} } @@ -182,15 +146,16 @@ extension TripleChartsLinkedWorkVC: AAChartViewDelegate { func aaChartView(_ aaChartView: AAChartView, moveOverEventMessage: AAMoveOverEventMessageModel) { let message = moveOverEventMessage print("📊📊📊move over event message: \(message.name ?? "")") + let jsFuncStr = configureSyncRefreshTooltipJSString(message: message) if aaChartView == aaChartView1 { - aaChartView2.aa_evaluateJavaScriptStringFunction(configureSyncRefreshTooltipJSString(message: message)) - aaChartView3.aa_evaluateJavaScriptStringFunction(configureSyncRefreshTooltipJSString(message: message)) + aaChartView2.evaluateJavaScript(jsFuncStr) + aaChartView3.evaluateJavaScript(jsFuncStr) } else if aaChartView == aaChartView2 { - aaChartView1.aa_evaluateJavaScriptStringFunction(configureSyncRefreshTooltipJSString(message: message)) - aaChartView3.aa_evaluateJavaScriptStringFunction(configureSyncRefreshTooltipJSString(message: message)) + aaChartView1.evaluateJavaScript(jsFuncStr) + aaChartView3.evaluateJavaScript(jsFuncStr) } else if aaChartView == aaChartView3 { - aaChartView1.aa_evaluateJavaScriptStringFunction(configureSyncRefreshTooltipJSString(message: message)) - aaChartView2.aa_evaluateJavaScriptStringFunction(configureSyncRefreshTooltipJSString(message: message)) + aaChartView1.evaluateJavaScript(jsFuncStr) + aaChartView2.evaluateJavaScript(jsFuncStr) } } } From cb42539fb8e3956ac1770cb97c4c3e886f902a72 Mon Sep 17 00:00:00 2001 From: An An <2236368544@qq.com> Date: Fri, 22 Nov 2024 11:13:17 +0800 Subject: [PATCH 003/107] Update JSFunctionBeforeAndAfterRenderingComposer3.swift --- .../JSFunctionBeforeAndAfterRenderingComposer3.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AAInfographicsDemo/Demo/AAOptionsWithJS/JSFunctionBeforeAndAfterRenderingComposer3.swift b/AAInfographicsDemo/Demo/AAOptionsWithJS/JSFunctionBeforeAndAfterRenderingComposer3.swift index e15f8fe1..b140c018 100644 --- a/AAInfographicsDemo/Demo/AAOptionsWithJS/JSFunctionBeforeAndAfterRenderingComposer3.swift +++ b/AAInfographicsDemo/Demo/AAOptionsWithJS/JSFunctionBeforeAndAfterRenderingComposer3.swift @@ -80,7 +80,7 @@ class JSFunctionBeforeAndAfterRenderingComposer3 { let seriesElement = AASeriesElement() .data(newData) .name(dataset["name"] as? String ?? "") - .type(.area) +// .type(.area) .color(colorsArr[idx]) finalDatasets.append(seriesElement) From fda059eef507fa8ddb070d229f1d26bd1e5efb4a Mon Sep 17 00:00:00 2001 From: An An <2236368544@qq.com> Date: Fri, 22 Nov 2024 11:13:22 +0800 Subject: [PATCH 004/107] Update TripleChartsLinkedWorkVC.swift --- .../TripleChartsLinkedWorkVC.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/AAInfographicsDemo/Demo/AdditionalContent1/TripleChartsLinkedWorkVC.swift b/AAInfographicsDemo/Demo/AdditionalContent1/TripleChartsLinkedWorkVC.swift index 6a99e8ab..190a089b 100644 --- a/AAInfographicsDemo/Demo/AdditionalContent1/TripleChartsLinkedWorkVC.swift +++ b/AAInfographicsDemo/Demo/AdditionalContent1/TripleChartsLinkedWorkVC.swift @@ -36,9 +36,13 @@ class TripleChartsLinkedWorkVC: UIViewController { self.aaChartView1.delegate = self let aaOptions1 = AAOptions() + .chart(AAChart() + .type(.column)) .title(AATitle() .text("Speed") .align(.left)) + .tooltip(AATooltip() + .shared(true)) .xAxis(AAXAxis() .crosshair(AACrosshair() .color(AAColor.green) @@ -66,9 +70,13 @@ class TripleChartsLinkedWorkVC: UIViewController { self.aaChartView2.delegate = self let aaOptions2 = AAOptions() + .chart(AAChart() + .type(.column)) .title(AATitle() .text("Elevation") .align(.left)) + .tooltip(AATooltip() + .shared(true)) .xAxis(AAXAxis() .crosshair(AACrosshair() .color(AAColor.green) @@ -96,9 +104,13 @@ class TripleChartsLinkedWorkVC: UIViewController { self.aaChartView3.delegate = self let aaOptions3 = AAOptions() + .chart(AAChart() + .type(.column)) .title(AATitle() .text("Heart Rate") .align(.left)) + .tooltip(AATooltip() + .shared(true)) .xAxis(AAXAxis() .crosshair(AACrosshair() .color(AAColor.green) From d2d81ccb556b1ea00edab32188c7947621e2b66c Mon Sep 17 00:00:00 2001 From: An An <2236368544@qq.com> Date: Fri, 22 Nov 2024 14:41:34 +0800 Subject: [PATCH 005/107] Update AABaseChartVC.swift --- AAInfographicsDemo/Demo/AdditionalContent2/AABaseChartVC.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AAInfographicsDemo/Demo/AdditionalContent2/AABaseChartVC.swift b/AAInfographicsDemo/Demo/AdditionalContent2/AABaseChartVC.swift index 8571bc93..f1e09393 100644 --- a/AAInfographicsDemo/Demo/AdditionalContent2/AABaseChartVC.swift +++ b/AAInfographicsDemo/Demo/AdditionalContent2/AABaseChartVC.swift @@ -88,7 +88,7 @@ class AABaseChartVC: UIViewController { private func setupChartView() { aaChartView = AAChartView() - aaChartView!.isScrollEnabled = false + aaChartView!.isScrollEnabled = true //设置 aaChartView 可以调试 if #available(iOS 16.4, *) { aaChartView!.isInspectable = true From cee84794c99924ad1f8726653cbb6f36ab8b48e2 Mon Sep 17 00:00:00 2001 From: An An <2236368544@qq.com> Date: Fri, 22 Nov 2024 14:43:36 +0800 Subject: [PATCH 006/107] =?UTF-8?q?Test=20synchronizedChart=20successfully?= =?UTF-8?q?=20=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AAChartCreator/AAChartView.swift | 41 ++- AAInfographics/AAChartCreator/AAOptions.swift | 17 ++ .../AAJSFiles.bundle/AAChartView.html | 12 +- ...tionBeforeAndAfterRenderingComposer3.swift | 242 +++++++++++++++--- 4 files changed, 275 insertions(+), 37 deletions(-) diff --git a/AAInfographics/AAChartCreator/AAChartView.swift b/AAInfographics/AAChartCreator/AAChartView.swift index f828cd02..1446067f 100644 --- a/AAInfographics/AAChartCreator/AAChartView.swift +++ b/AAInfographics/AAChartCreator/AAChartView.swift @@ -89,6 +89,10 @@ public class AAChartView: WKWebView { private var clickEventEnabled: Bool? private var touchEventEnabled: Bool? +// NSString *_beforeDrawChartJavaScript; +// NSString *_afterDrawChartJavaScript; + private var beforeDrawChartJavaScript: String? + private var afterDrawChartJavaScript: String? private weak var _delegate: AAChartViewDelegate? public weak var delegate: AAChartViewDelegate? { @@ -194,9 +198,23 @@ public class AAChartView: WKWebView { private func drawChart() { +// if (_beforeDrawChartJavaScript) { +// [self safeEvaluateJavaScriptString:_beforeDrawChartJavaScript]; +// } + if beforeDrawChartJavaScript != nil { + safeEvaluateJavaScriptString(beforeDrawChartJavaScript!) + } + //Add `frame.size.height` to solve the problem that the height of the new version of Highcharts chart will not adapt to the container - let jsStr = "loadTheHighChartView('\(optionsJson ?? "")','\(contentWidth ?? 0)','\(contentHeight ?? frame.size.height)')" + let jsStr = "loadTheHighChartView('\(optionsJson ?? "")','\(contentWidth ?? 0)','\(contentHeight ?? 0)')" safeEvaluateJavaScriptString(jsStr) + +//if (self.afterDrawChartJavaScript) { +// [self safeEvaluateJavaScriptString:self.afterDrawChartJavaScript]; +// } + if afterDrawChartJavaScript != nil { + safeEvaluateJavaScriptString(afterDrawChartJavaScript!) + } } private func safeEvaluateJavaScriptString (_ jsString: String) { @@ -221,7 +239,7 @@ public class AAChartView: WKWebView { code = \(objcError.code); domain = \(objcError.domain); userInfo = { - NSLocalizedDescription = "A JavaScript exception occurred"; + NSLocalizedDescription = "\(errorUserInfo["NSLocalizedDescription"] ?? "")"; WKJavaScriptExceptionColumnNumber = \(errorUserInfo["WKJavaScriptExceptionColumnNumber"] ?? ""); WKJavaScriptExceptionLineNumber = \(errorUserInfo["WKJavaScriptExceptionLineNumber"] ?? ""); WKJavaScriptExceptionMessage = \(errorUserInfo["WKJavaScriptExceptionMessage"] ?? ""); @@ -252,6 +270,25 @@ public class AAChartView: WKWebView { } private func configureOptionsJsonStringWithAAOptions(_ aaOptions: AAOptions) { +// if (aaOptions.beforeDrawChartJavaScript) { +// _beforeDrawChartJavaScript = aaOptions.beforeDrawChartJavaScript; +// aaOptions.beforeDrawChartJavaScript = nil; +// } + if aaOptions.beforeDrawChartJavaScript != nil { + beforeDrawChartJavaScript = aaOptions.beforeDrawChartJavaScript + aaOptions.beforeDrawChartJavaScript = nil + } + +// if (aaOptions.afterDrawChartJavaScript) { +// _afterDrawChartJavaScript = aaOptions.afterDrawChartJavaScript; +// aaOptions.afterDrawChartJavaScript = nil; +// } + + if aaOptions.afterDrawChartJavaScript != nil { + afterDrawChartJavaScript = aaOptions.afterDrawChartJavaScript + aaOptions.afterDrawChartJavaScript = nil + } + if isClearBackgroundColor == true { aaOptions.chart?.backgroundColor = AAColor.clear } diff --git a/AAInfographics/AAChartCreator/AAOptions.swift b/AAInfographics/AAChartCreator/AAOptions.swift index 5e4e4c8f..bbfa0a76 100644 --- a/AAInfographics/AAChartCreator/AAOptions.swift +++ b/AAInfographics/AAChartCreator/AAOptions.swift @@ -52,6 +52,11 @@ public class AAOptions: AAObject { internal var clickEventEnabled: Bool? //Please DO NOT use this property internal var touchEventEnabled: Bool? //Please DO NOT use this property + //beforeDrawChartJavaScript + public var beforeDrawChartJavaScript: String? + //afterDrawChartJavaScript + public var afterDrawChartJavaScript: String? + @discardableResult public func chart(_ prop: AAChart?) -> AAOptions { chart = prop @@ -142,6 +147,18 @@ public class AAOptions: AAObject { return self } + @discardableResult + public func beforeDrawChartJavaScript(_ prop: String?) -> AAOptions { + beforeDrawChartJavaScript = prop + return self + } + + @discardableResult + public func afterDrawChartJavaScript(_ prop: String?) -> AAOptions { + afterDrawChartJavaScript = prop + return self + } + public override init() { let aaCredits = AACredits() aaCredits.enabled = false diff --git a/AAInfographics/AAJSFiles.bundle/AAChartView.html b/AAInfographics/AAJSFiles.bundle/AAChartView.html index 756c9582..4457252f 100755 --- a/AAInfographics/AAJSFiles.bundle/AAChartView.html +++ b/AAInfographics/AAJSFiles.bundle/AAChartView.html @@ -14,11 +14,19 @@ -
+
- - + + + - - - + + +