Skip to content

Commit 042b2dd

Browse files
authored
Merge pull request #1609 from AAChartModel/dev
Dev
2 parents a0e7947 + 4641aeb commit 042b2dd

File tree

59 files changed

+2861
-831
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+2861
-831
lines changed

AAChartKit/AAChartCreator/AAChartKit.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,5 @@
3535
#import "NSArray+toJSArray.h"
3636
#import "AAStyleConvenience.h"
3737
#import "AAMarginConvenience.h"
38-
38+
#import "AAJsonConverter.h"
3939

AAChartKit/AAChartCreator/AAChartModel.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,10 @@ AACHARTKIT_EXTERN AAChartType const AAChartTypeSpline; //曲线图
9494
AACHARTKIT_EXTERN AAChartType const AAChartTypeScatter; //散点图
9595
AACHARTKIT_EXTERN AAChartType const AAChartTypePie; //扇形图
9696
AACHARTKIT_EXTERN AAChartType const AAChartTypeBubble; //气泡图
97+
AACHARTKIT_EXTERN AAChartType const AAChartTypePackedbubble; //紧凑气泡图
9798
AACHARTKIT_EXTERN AAChartType const AAChartTypePyramid; //金字塔图
9899
AACHARTKIT_EXTERN AAChartType const AAChartTypeFunnel; //漏斗图
100+
AACHARTKIT_EXTERN AAChartType const AAChartTypeColumnpyramid; //柱形金字塔图
99101
AACHARTKIT_EXTERN AAChartType const AAChartTypeColumnrange; //柱形范围图
100102
AACHARTKIT_EXTERN AAChartType const AAChartTypeArearange; //区域折线范围图
101103
AACHARTKIT_EXTERN AAChartType const AAChartTypeAreasplinerange; //区域曲线范围图

AAChartKit/AAChartCreator/AAChartModel.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@
4242
AAChartType const AAChartTypeScatter = @"scatter"; //散点图
4343
AAChartType const AAChartTypePie = @"pie"; //扇形图
4444
AAChartType const AAChartTypeBubble = @"bubble"; //气泡图
45+
AAChartType const AAChartTypePackedbubble = @"packedbubble"; //紧凑气泡图
4546
AAChartType const AAChartTypePyramid = @"pyramid"; //金字塔图
4647
AAChartType const AAChartTypeFunnel = @"funnel"; //漏斗图
48+
AAChartType const AAChartTypeColumnpyramid = @"columnpyramid"; //柱形金字塔图
4749
AAChartType const AAChartTypeColumnrange = @"columnrange"; //柱形范围图
4850
AAChartType const AAChartTypeArearange = @"arearange"; //区域折线范围图
4951
AAChartType const AAChartTypeAreasplinerange = @"areasplinerange"; //区域曲线范围图

AAChartKit/AAChartCreator/AAChartView.h

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -311,20 +311,4 @@ typedef void(^AADidReceiveScriptMessageBlock)(AAChartView *aaChartView, WKScript
311311
@end
312312

313313

314-
@interface AAJsonConverter : NSObject
315-
316-
/// Convert Object to be Dictionary
317-
/// @param objc object instance
318-
+ (NSDictionary*)dictionaryWithObjectInstance:(id)objc;
319-
320-
/// Get pure options Json string from option instance
321-
/// @param optionsObject Instance object of AAOptions
322-
+ (NSString *)pureOptionsJsonStringWithOptionsInstance:(id)optionsObject;
323-
324-
/// Get pure Json string from Json object
325-
/// @param jsonObjc Instance object of Json object
326-
+ (NSString *)pureJsonStringWithJsonObject:(id)jsonObjc;
327-
328-
329-
@end
330314

AAChartKit/AAChartCreator/AAChartView.m

Lines changed: 13 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
*/
3232

3333
#import "AAChartView.h"
34+
#import "AAJsonConverter.h"
3435

3536
@implementation AAWeakProxy
3637

@@ -529,6 +530,12 @@ - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigat
529530
- (void)drawChart {
530531
if (_beforeDrawChartJavaScript) {
531532
[self safeEvaluateJavaScriptString:_beforeDrawChartJavaScript];
533+
534+
//console 输出一下_beforeDrawChartJavaScript,方便调试
535+
AADetailLog(@"Before Drawing Chart JavaScript String: %@",_beforeDrawChartJavaScript);
536+
537+
//beforeDrawChartJavaScript 执行完毕后置空,防止重复调用
538+
_beforeDrawChartJavaScript = nil;
532539
}
533540

534541
NSString *jsStr = [NSString stringWithFormat:@"loadTheHighChartView('%@','%f','%f')",
@@ -539,6 +546,12 @@ - (void)drawChart {
539546

540547
if (_afterDrawChartJavaScript) {
541548
[self safeEvaluateJavaScriptString:_afterDrawChartJavaScript];
549+
550+
//console 输出一下_afterDrawChartJavaScript,方便调试
551+
AADetailLog(@"After Drawing Chart JavaScript String: %@",_afterDrawChartJavaScript);
552+
553+
//afterDrawChartJavaScript 执行完毕后置空,防止重复调用
554+
_afterDrawChartJavaScript = nil;
542555
}
543556
}
544557

@@ -752,107 +765,5 @@ - (void)dealloc {
752765

753766

754767

755-
#import <objc/runtime.h>
756-
757-
@implementation AAJsonConverter
758-
759-
+ (NSDictionary*)dictionaryWithObjectInstance:(id)objc {
760-
unsigned int propsCount;
761-
objc_property_t *props = class_copyPropertyList([objc class], &propsCount);
762-
NSMutableDictionary *propsDic = [NSMutableDictionary dictionaryWithCapacity:propsCount];
763-
764-
for (NSUInteger i = 0; i < propsCount; i++) {
765-
objc_property_t prop = props[i];
766-
NSString *propName = [NSString stringWithUTF8String:property_getName(prop)];
767-
id value = [objc valueForKey:propName];
768-
if (value == nil) {
769-
value = [NSNull null];
770-
continue;
771-
} else {
772-
value = [self getObjectInternal:value];
773-
}
774-
propsDic[propName] = value;
775-
}
776-
free(props);
777-
778-
return propsDic;
779-
}
780-
781-
+ (id)getObjectInternal:(id)objc {
782-
if ( [objc isKindOfClass:[NSString class]]
783-
|| [objc isKindOfClass:[NSNumber class]]
784-
|| [objc isKindOfClass:[NSNull class]] ) {
785-
return objc;
786-
}
787-
788-
if ([objc isKindOfClass:[NSArray class]]) {
789-
NSArray *objcArr = objc;
790-
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:objcArr.count];
791-
for (id element in objcArr) {
792-
[arr addObject:[self getObjectInternal:element]];
793-
}
794-
return arr;
795-
}
796-
797-
if ([objc isKindOfClass:[NSDictionary class]]) {
798-
NSDictionary *objcDic = objc;
799-
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:[objcDic count]];
800-
NSArray *allKeys = objcDic.allKeys;
801-
for (NSString *key in allKeys) {
802-
dic[key] = [self getObjectInternal:objcDic[key]];
803-
}
804-
return dic;
805-
}
806-
807-
return [self dictionaryWithObjectInstance:objc];
808-
}
809-
810-
+ (NSString *)pureOptionsJsonStringWithOptionsInstance:(id)optionsObject {
811-
NSDictionary *dic;
812-
if ([optionsObject isKindOfClass:[NSDictionary class]] ) {
813-
dic = optionsObject;
814-
} else {
815-
dic = [self dictionaryWithObjectInstance:optionsObject];
816-
}
817-
#if DEBUG
818-
[AAJsonConverter printPrettyPrintedJsonStringWithJsonObject:dic];
819-
#endif
820-
return [self pureJsonStringWithJsonObject:dic];
821-
}
822-
823-
+ (NSString*)pureJsonStringWithJsonObject:(id)jsonObject {
824-
NSError *error = nil;
825-
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonObject
826-
options:kNilOptions
827-
error:&error];
828-
NSString *pureJsonStr =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
829-
if (error) {
830-
AADetailLog(@"❌❌❌ pure JSONString with JSONObject serialization failed:%@", error);
831-
return nil;
832-
}
833-
return pureJsonStr;
834-
}
835-
836-
#if DEBUG
837-
+ (NSString*)printPrettyPrintedJsonStringWithJsonObject:(id)jsonObject {
838-
NSError *error = nil;
839-
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonObject
840-
options:NSJSONWritingPrettyPrinted
841-
error:&error];
842-
NSString *jsonStr =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
843-
NSLog(@"----------- console log AAOptions JSON information of AAChartView -----------:\n%@",jsonStr);
844-
845-
if (error) {
846-
NSLog(@"❌❌❌ pretty printed JSONString with JSONObject serialization failed:%@", error);
847-
return nil;
848-
}
849-
return jsonStr;
850-
}
851-
#endif
852-
853-
854-
@end
855-
856-
857768

858769

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//
2+
// AAJsonConverter.h
3+
// AAChartKitDemo
4+
//
5+
// Created by AnAn on 2025/9/30.
6+
// Copyright © 2025 An An. All rights reserved.
7+
//
8+
9+
#import <Foundation/Foundation.h>
10+
11+
NS_ASSUME_NONNULL_BEGIN
12+
13+
14+
@interface AAJsonConverter : NSObject
15+
16+
/// Convert Object to be Dictionary
17+
/// @param objc object instance
18+
+ (NSDictionary*)dictionaryWithObjectInstance:(id)objc;
19+
20+
/// Get pure options Json string from option instance
21+
/// @param optionsObject Instance object of AAOptions
22+
+ (NSString *)pureOptionsJsonStringWithOptionsInstance:(id)optionsObject;
23+
24+
/// Get pure Json string from Json object
25+
/// @param jsonObjc Instance object of Json object
26+
+ (NSString *)pureJsonStringWithJsonObject:(id)jsonObjc;
27+
28+
29+
@end
30+
31+
NS_ASSUME_NONNULL_END
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
//
2+
// AAJsonConverter.m
3+
// AAChartKitDemo
4+
//
5+
// Created by AnAn on 2025/9/30.
6+
// Copyright © 2025 An An. All rights reserved.
7+
//
8+
9+
#import "AAJsonConverter.h"
10+
#import <objc/runtime.h>
11+
12+
@implementation AAJsonConverter
13+
14+
+ (NSDictionary*)dictionaryWithObjectInstance:(id)objc {
15+
unsigned int propsCount;
16+
objc_property_t *props = class_copyPropertyList([objc class], &propsCount);
17+
NSMutableDictionary *propsDic = [NSMutableDictionary dictionaryWithCapacity:propsCount];
18+
19+
for (NSUInteger i = 0; i < propsCount; i++) {
20+
objc_property_t prop = props[i];
21+
NSString *propName = [NSString stringWithUTF8String:property_getName(prop)];
22+
id value = [objc valueForKey:propName];
23+
if (value == nil) {
24+
value = [NSNull null];
25+
continue;
26+
} else {
27+
value = [self getObjectInternal:value];
28+
}
29+
propsDic[propName] = value;
30+
}
31+
free(props);
32+
33+
return propsDic;
34+
}
35+
36+
+ (id)getObjectInternal:(id)objc {
37+
if ( [objc isKindOfClass:[NSString class]]
38+
|| [objc isKindOfClass:[NSNumber class]]
39+
|| [objc isKindOfClass:[NSNull class]] ) {
40+
return objc;
41+
}
42+
43+
if ([objc isKindOfClass:[NSArray class]]) {
44+
NSArray *objcArr = objc;
45+
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:objcArr.count];
46+
for (id element in objcArr) {
47+
[arr addObject:[self getObjectInternal:element]];
48+
}
49+
return arr;
50+
}
51+
52+
if ([objc isKindOfClass:[NSDictionary class]]) {
53+
NSDictionary *objcDic = objc;
54+
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:[objcDic count]];
55+
NSArray *allKeys = objcDic.allKeys;
56+
for (NSString *key in allKeys) {
57+
dic[key] = [self getObjectInternal:objcDic[key]];
58+
}
59+
return dic;
60+
}
61+
62+
return [self dictionaryWithObjectInstance:objc];
63+
}
64+
65+
+ (NSString *)pureOptionsJsonStringWithOptionsInstance:(id)optionsObject {
66+
NSDictionary *dic;
67+
if ([optionsObject isKindOfClass:[NSDictionary class]] ) {
68+
dic = optionsObject;
69+
} else {
70+
dic = [self dictionaryWithObjectInstance:optionsObject];
71+
}
72+
#if DEBUG
73+
[AAJsonConverter printPrettyPrintedJsonStringWithJsonObject:dic];
74+
#endif
75+
return [self pureJsonStringWithJsonObject:dic];
76+
}
77+
78+
+ (NSString*)pureJsonStringWithJsonObject:(id)jsonObject {
79+
NSError *error = nil;
80+
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonObject
81+
options:kNilOptions
82+
error:&error];
83+
NSString *pureJsonStr =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
84+
if (error) {
85+
#if DEBUG
86+
NSLog(@"❌❌❌ pure JSONString with JSONObject serialization failed:%@", error);
87+
#endif
88+
return nil;
89+
}
90+
return pureJsonStr;
91+
}
92+
93+
#if DEBUG
94+
+ (NSString*)printPrettyPrintedJsonStringWithJsonObject:(id)jsonObject {
95+
NSError *error = nil;
96+
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonObject
97+
options:NSJSONWritingPrettyPrinted
98+
error:&error];
99+
NSString *jsonStr =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
100+
NSLog(@"----------- console log AAOptions JSON information of AAChartView -----------:\n%@",jsonStr);
101+
102+
if (error) {
103+
NSLog(@"❌❌❌ pretty printed JSONString with JSONObject serialization failed:%@", error);
104+
return nil;
105+
}
106+
return jsonStr;
107+
}
108+
#endif
109+
110+
111+
@end
112+

AAChartKit/AAChartCreator/AAOptions.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#import "AAChart.h"
3737
#import "AAAnimation.h"
3838
#import "AATitle.h"
39+
#import "AAAxisTitle.h"
3940
#import "AAXAxis.h"
4041
#import "AAYAxis.h"
4142
#import "AAPlotBandsElement.h"
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//
2+
// AAAxisTitle.h
3+
// AAChartKitDemo
4+
//
5+
// Created by AnAn on 2025/9/18.
6+
// Copyright © 2025 An An. All rights reserved.
7+
//
8+
9+
#import <Foundation/Foundation.h>
10+
11+
@class AAStyle;
12+
13+
typedef NSString *AAChartAxisTitleAlignValueType;
14+
15+
//https://api.highcharts.com/highcharts/xAxis.title.align
16+
//https://api.highcharts.com/highcharts/yAxis.title.align
17+
AACHARTKIT_EXTERN AAChartAxisTitleAlignValueType const AAChartAxisTitleAlignValueTypeHigh;
18+
AACHARTKIT_EXTERN AAChartAxisTitleAlignValueType const AAChartAxisTitleAlignValueTypeLow;
19+
AACHARTKIT_EXTERN AAChartAxisTitleAlignValueType const AAChartAxisTitleAlignValueTypeMiddle;
20+
21+
//https://api.highcharts.com/highcharts/xAxis.title
22+
//https://api.highcharts.com/highcharts/yAxis.title
23+
@interface AAAxisTitle : NSObject
24+
25+
AAPropStatementAndPropSetFuncStatement(copy, AAAxisTitle, AAChartAxisTitleAlignValueType, align)
26+
AAPropStatementAndPropSetFuncStatement(copy, AAAxisTitle, NSString *, margin)
27+
AAPropStatementAndPropSetFuncStatement(strong, AAAxisTitle, NSNumber *, offset)
28+
AAPropStatementAndPropSetFuncStatement(strong, AAAxisTitle, NSNumber *, rotation)
29+
AAPropStatementAndPropSetFuncStatement(strong, AAAxisTitle, AAStyle *, style)
30+
AAPropStatementAndPropSetFuncStatement(copy, AAAxisTitle, NSString *, text)
31+
AAPropStatementAndPropSetFuncStatement(copy, AAAxisTitle, NSString *, textAlign)
32+
AAPropStatementAndPropSetFuncStatement(strong, AAAxisTitle, NSNumber *, useHTML) // BOOL 类型, 是否使用 HTML 渲染标题
33+
AAPropStatementAndPropSetFuncStatement(strong, AAAxisTitle, NSNumber *, x) //标题相对于水平对齐的偏移量,取值范围为:图表左边距到图表右边距,可以是负值,单位px。 默认是:0.
34+
AAPropStatementAndPropSetFuncStatement(strong, AAAxisTitle, NSNumber *, y) //标题相对于垂直对齐的偏移量,取值范围:图表的上边距(chart.spacingTop )到图表的下边距(chart.spacingBottom),可以是负值,单位是px。默认值和字体大小有关。
35+
36+
@end
37+

0 commit comments

Comments
 (0)