金额计算的部分,在前一篇就完成了,这一篇开始讲 pie chart 的实作。
分析我们要做的事情
1 - 设置 Pie Chart View 的基本 UI
// MARK: ui methods
private func setup(chartView: PieChartView) {
chartView.usePercentValuesEnabled = true
chartView.drawSlicesUnderHoleEnabled = false
chartView.holeRadiusPercent = 0.58
chartView.transparentCircleRadiusPercent = 0.61
chartView.chartDescription?.enabled = false
chartView.setExtraOffsets(left: 5, top: 10, right: 5, bottom: 5)
chartView.drawCenterTextEnabled = true
chartView.drawHoleEnabled = false
chartView.rotationEnabled = true
chartView.highlightPerTapEnabled = true
chartView.entryLabelColor = .darkText
let l = chartView.legend
l.horizontalAlignment = .right
l.verticalAlignment = .top
l.orientation = .vertical
l.drawInside = false
l.xEntrySpace = 7
l.yEntrySpace = 0
l.yOffset = 0
l.textColor = .black
// chartView.legend = l
}
2 - 依最新的三大法人资讯日期为 key,找出对应 key 的当日台股成交量
/// 获得当下三大法人日期的大盘资讯
private func getMarketTradingInfo() -> TwMarketTradingInfo? {
let timeInterval = date.timeIntervalSince1970
for info in dailyTradingInfo {
if info.date.timeIntervalSince1970 == timeInterval {
return info
}
}
return nil
}
3 - 依照台股成交量计算三大法人成交比重
4 - 将成交比重的值转成 PieChartData
在第 3 步要注意的是,getPieChartData 传进来的值是 [买进 + 卖出] 的值,但比重的计算上,应该是 [买进 + 卖出] / 2 才是合理的。因为台股总成交金额 == 总买进金额 == 总卖出金额,所以要相加除以2。
private func getPieChartData(threeMajorTrading: Double, twMarketTrading: Double) -> PieChartData {
// 三大法人传入值是加总,所以要除以台股总成交後,再除以 2
let threeMajorPercentage = (threeMajorTrading / twMarketTrading) / 2
let nonThreeMajorPercentage = 1 - threeMajorPercentage
let threeMajorTradingData = PieChartDataEntry(value: threeMajorPercentage, label: "三大法人交易额")
let nonThreeMajorTradingData = PieChartDataEntry(value: nonThreeMajorPercentage, label: "非三大法人交易额")
let dataSet = PieChartDataSet(entries: [threeMajorTradingData, nonThreeMajorTradingData])
dataSet.colors = [.systemGreen, .systemBlue]
let data = PieChartData(dataSet: dataSet)
data.setValueTextColor(.darkText)
return data
}
5 - 呼叫上列所有 func 并渲染 pie chart view
/// 计算三大法人占股市交易的额度
private func updatePieChartThreeMajorPercentage() {
guard let twMarketTradingInfo = getMarketTradingInfo(),
let threeMajor = totalMajorInvestorInfo?.total else {
print("找不到和三大法人同日的大盘成交资讯,请检查资料来源")
return
}
let threeMajorTrading = threeMajor.totalBuy + threeMajor.totalSell
let twMarketTrading = twMarketTradingInfo.value ?? 0
let data = getPieChartData(threeMajorTrading: threeMajorTrading, twMarketTrading: twMarketTrading)
pieChartView.data = data
}
最後,让这些 func 在 button 中发动
@IBAction func drawPieChartButtonDidTap(_ sender: Any) {
setup(chartView: self.pieChartView)
updatePieChartThreeMajorPercentage()
}
完成这一步的 UI 如下
台股申购日历
IT铁人赛Demo App
下方是这次 D1 ~ D12 的完成品,可以下载来试
App Store - 台股申购日历
<<: [Python 爬虫这样学,一定是大拇指拉!] DAY23 - 实战演练:HTML Response - 抓取股票代码清单 (2)
开发必须的设备以及相关的设定 入门开发的几个必要条件:一台 Mac , 苹果帐号 ,以及一个一般人智...
一. LSTM的问题 LSTM虽然非常强大,但LSTM也是有一个问题,就是计算时间较久导致执行速度较...
上篇文章我们在 BlueHost 架起了 WordPress 环境,但也许你还不知道什麽是 Word...
Hello, 各位 iT邦帮忙 的粉丝们大家好~~~ 本篇是 Re: 从零开始用 Xamarin 技...
在pod的生态中,本身就是一个小小世界,新旧pod之间通常不影响,当建立新的pod时,基本上不会跟被...