在上一篇,我们完成了 三大法人 vs. 非三大法人占比。
不过,三大法人占比还可以再用细项来分出,把三大法人中的每个法人占比列出来。
先拉一个红色区域,去放 detail 的 pie chart
一个 pie chart 是细项,一个是 三大法人 vs. 非三大
private lazy var detailPieChartView: PieChartView = {
let view = PieChartView()
return view
}()
private lazy var totalPieChartView: PieChartView = {
let view = PieChartView()
return view
}()
add 两个
private func addPieChart() {
totalPieChartContainer.addSubview(totalPieChartView)
totalPieChartView.translatesAutoresizingMaskIntoConstraints = false
totalPieChartView.leadingAnchor.constraint(equalTo: totalPieChartContainer.leadingAnchor).isActive = true
totalPieChartView.trailingAnchor.constraint(equalTo: totalPieChartContainer.trailingAnchor).isActive = true
totalPieChartView.topAnchor.constraint(equalTo: totalPieChartContainer.topAnchor).isActive = true
totalPieChartView.bottomAnchor.constraint(equalTo: totalPieChartContainer.bottomAnchor).isActive = true
detailPieChartContainer.addSubview(detailPieChartView)
detailPieChartView.translatesAutoresizingMaskIntoConstraints = false
detailPieChartView.leadingAnchor.constraint(equalTo: detailPieChartContainer.leadingAnchor).isActive = true
detailPieChartView.trailingAnchor.constraint(equalTo: detailPieChartContainer.trailingAnchor).isActive = true
detailPieChartView.topAnchor.constraint(equalTo: detailPieChartContainer.topAnchor).isActive = true
detailPieChartView.bottomAnchor.constraint(equalTo: detailPieChartContainer.bottomAnchor).isActive = true
}
去要改的 data 只是原来三大法人中的资料,因为已经有每个法人的进出比重,所以只要下方的程序码即可得到每个法人的占比。逻辑和 三大法人 vs. 非三大一样。
/// 计算三大法人各组成占总股市交易的额度
private func updateDetailPieChartThreeMajorPercentage(chartView: PieChartView) {
guard let twMarketTradingInfo = getMarketTradingInfo(),
let dealers = totalMajorInvestorInfo?.dealers,
let securities = totalMajorInvestorInfo?.securitiesInvestorForTrust,
let foreign = totalMajorInvestorInfo?.foreign,
let total = totalMajorInvestorInfo?.total else {
print("找不到和三大法人同日的大盘成交资讯,请检查资料来源")
return
}
let dealersTrading = dealers.totalBuy + dealers.totalSell
let securitiesTrading = securities.totalBuy + securities.totalSell
let foreignTrading = foreign.totalBuy + foreign.totalSell
let totalTrading = total.totalBuy + total.totalSell
let twMarketTrading = twMarketTradingInfo.value ?? 0
let data = getPieChartData(dealersTrading: dealersTrading, securitiesTrading: securitiesTrading, foreignTrading: foreignTrading, totalTrading: totalTrading, twMarketTrading: twMarketTrading)
chartView.data = data
}
private func getPieChartData(dealersTrading: Double, securitiesTrading: Double, foreignTrading: Double, totalTrading: Double, twMarketTrading: Double) -> PieChartData {
let threeMajorPercentage = (totalTrading / twMarketTrading) / 2
let nonMajorPercentage = 1 - threeMajorPercentage
let threeMajorPartial = dealersTrading + securitiesTrading + foreignTrading
let dealersPercentage = dealersTrading * threeMajorPercentage / threeMajorPartial
let securitiesPercentage = securitiesTrading * threeMajorPercentage / threeMajorPartial
let foreignPercentage = foreignTrading * threeMajorPercentage / threeMajorPartial
let dealersDataEntry = PieChartDataEntry(value: dealersPercentage, label: "自营商")
let securitiesDataEntry = PieChartDataEntry(value: securitiesPercentage, label: "投信")
let foreignDataEntry = PieChartDataEntry(value: foreignPercentage, label: "外资")
let nonMajorDataEntry = PieChartDataEntry(value: nonMajorPercentage, label: "非三大法人")
let dataSet = PieChartDataSet(entries: [foreignDataEntry, dealersDataEntry, securitiesDataEntry, nonMajorDataEntry])
dataSet.colors = [.systemRed, .systemGreen, .systemGray, .systemBlue]
let data = PieChartData(dataSet: dataSet)
data.setValueTextColor(.darkText)
return data
}
接下来,在原来的 button 中,加上这些程序码就完成了
@IBAction func drawPieChartButtonDidTap(_ sender: Any) {
setup(chartView: self.detailPieChartView)
setup(chartView: self.totalPieChartView)
updateDetailPieChartThreeMajorPercentage(chartView: self.detailPieChartView)
updatePieChartThreeMajorPercentage(chartView: self.totalPieChartView)
}
完成後的 UI 如下
和牛涮最近很常出现在朋友的ig画面中 前阵子找时间到忠孝店品嚐 在价位方面 考量炙烧和牛寿司有数量限...
哈罗~今天来聊聊跟@mixin的兄弟 @extend 我们平常在写css时,时常会把class们相同...
React Native 我的安装步骤: Node.js,我使用 Homebrew 来安装,所以会先...
工欲善其事必先利其器,在了解C++之前,下去下载吧!!! 安装Dev C++ [ https://s...
众所皆知 Gradle 是一个 Build Tool。对於编译式语言来说,编译过程会经过很多手续,这...