# LZ_StockChart **Repository Path**: PromiscuousYouth/LZ_StockChart ## Basic Information - **Project Name**: LZ_StockChart - **Description**: K线学习的Demo - **Primary Language**: Objective-C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2017-01-06 - **Last Updated**: 2025-05-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LZ_StockChart ###### 感谢作者开源的项目 [WillkYang/Y_KLine](https://github.com/WillkYang/Y_KLine). 基于作者开源项目的本身,结合实际情况做的一个修改版。 ![分时图](LZ_TimeLine.png) ![分时图长按](LZ_LongPressTLine.png) ![K线图](LZ_KLine.png) ![缩小K线图](LZ_ThinKLine.png) ![K线图长按](LZ_LongPressKLine.png) ![KDJ线](LZ_KDJLine.png) 更改了布局样式,画上了固定的背景线网格,增加了时间轴的显示状态,移除了分时线的放大手势,修改卡顿的放大手势,固定了分时线的间隔,修改原作者涨跌颜色颠倒,增加十字线,修改长按方法,增加长按视图(写的不好,应付下),增加实时更新添加数据(已实现,暂时没想好,怎么写进Demo中)。 **Yahoo**被收购最终导致Demo没有数据可显示,曾使用Yahoo股票数据,具体可自行百度。 ```objective-c #pragma mark - 消失的Yahoo股票数据 /** 刷新雅虎数据 */ - (void)reloadYahooStockData; /** 请求雅虎股票API数据 @param parm parameterDic */ - (void)KLineRequestWithYaHoo:(NSDictionary *)parm; /** 解析Yahoo数据 @param dataSourceStr 所有的数据字符串 @return 返回装有每条数据字典的数组 */ - (NSMutableArray *)klineDataSourceDispose:(NSString *)dataSourceStr; ``` ### 使用 这里用到了`YYModel`,将JSON转换成自定义的Model ```objective-c //传入一个JSON/Dictionary LZ_StockTLineModel *timeLineModel = [LZ_StockTLineModel yy_modelWithJSON:data]; //分时 [self timeLineDicToModel:timeLineModel.trend]; //K线 [self klineArrayToModel:kLineModel.kLine]; ``` 将传入的数组/Model数组初始化,`[self.stockChartView reloadData];`刷新`self.stockChartView` ```objective-c //初始化K线数据数组 + (instancetype)objectWithArray:(NSArray *)arr; //初始化分时数据数组 + (instancetype)timeObjectWithArray:(NSArray *)arr ; //初始化K线Model + (instancetype)kLineObjectWithModelArray:(NSArray *)arr; //初始化分时model + (instancetype)timeObjectWithModelArray:(NSArray *)arr; ``` ```objective-c /** 赋值K线图Model @param klineArray 获得K线图数组 */ - (void)klineArrayToModel:(NSMutableArray *)klineArray { // Y_KLineGroupModel *groupModel = [Y_KLineGroupModel objectWithArray:klineArray]; Y_KLineGroupModel *groupModel = [Y_KLineGroupModel kLineObjectWithModelArray:klineArray]; self.groupModel = groupModel; [self.modelsDict setObject:groupModel forKey:self.type]; [self.stockChartView reloadData]; } /** 赋值分时线图Model @param timeLineArray 分时线字典 */ - (void)timeLineDicToModel:(NSMutableArray *)timeLineArray { // Y_KLineGroupModel *groupModel = [Y_KLineGroupModel timeObjectWithArray:klineArray]; Y_KLineGroupModel *groupModel = [Y_KLineGroupModel timeObjectWithModelArray:timeLineArray]; self.groupModel = groupModel; [self.modelsDict setObject:groupModel forKey:self.type]; [self.stockChartView reloadData]; } ``` ### Demo目前存在的小问题 背景线和价格位置有偏差,竖屏状态下分时图和K线图的对比可能比较明显,时间轴会有一丢丢偏差,不是百分百的那种,至少是百分之90%;`Y-KlineModel`中没有修改方法名,只调整了计算方法MA7(MA10),MA30(MA20),可取消注释;当数据量过多的情况下,模拟器会花屏,内存会爆增,所有手机中只有iPhone 6 Plus 才会出现`Message from debugger: Terminated due to memory issue`,原因就是这个[内存恶鬼drawRect](http://bihongbo.com/2016/01/03/memoryGhostdrawRect/)。如果发现其他问题,欢迎Issues我 # License LZ_StockChart is available under the MIT license. See the LICENSE file for more info.