精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何在 SwiftUI 中創建條形圖

移動開發 移動應用
在 SwiftUI 中組合矩形來創建條形圖是比較容易的。SwiftUI 是一個很好的平臺,用于創建視圖和快速重構獨立的子視圖。在 SwiftUI 中構建條形圖需要做一些工作,隨著使用數據來試用條形圖,可以確定更多的定制化。

?前言

條形圖以矩形條的形式呈現數據的類別,其寬度和高度與它們表示的值成比例。本文將展示如何創建一個垂直條形圖,其中矩形的高度將代表每個類別的值。

開始圖表布局

SwiftUI 對探索不同布局和預覽實時視圖結果是很友好的。很容易將部分內容提取到子視圖中,以便每個部分都很小且易于維護。從將包含 BarChartView? 以及可能的其他文本或數據的視圖開始。這個 BarChartView 包含一個標題和一個圖表區,它們由文本和圓角矩形表示。

struct ChartView1: View {
var body: some View {
VStack {
Text("Sample Bar Chart")
.font(.title)

BarChartView(
title: "the chart title")
.frame(width: 300, height: 300, alignment: .center)

Spacer()
}
}
}
struct BarChartView: View {
var title: String

var body: some View {
GeometryReader { gr in
let headHeight = gr.size.height * 0.10
VStack {
ChartHeaderView(title: title, height: headHeight)
ChartAreaView()
}
}
}
}
struct ChartHeaderView: View {
var title: String
var height: CGFloat

var body: some View {
Text(title)
.frame(height: height)
}
}
struct ChartAreaView: View {
var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 5.0)
.fill(Color(#colorLiteral(red: 0.8906477705, green: 0.9005050659, blue: 0.8208766097, alpha: 1)))
}
}
}

圖片

圖表區添加條形圖

定義一些簡單的數據類別,例如一周內每天的步數。以下列表數據被作為主視圖的項目數據,每一條數據包含一個對(名稱,值)。在真正的 app 里,這里的數據應該通過 ViewModel 從 model 里取數據。

每日步數數據

Day

Steps

Mon

898

Tue

670

Wed

725

Thu

439

Fri

1232

Sat

771

Sun

365

struct DataItem: Identifiable {
let name: String
let value: Double
let id = UUID()
}

struct ChartView2: View {

let chartData: [DataItem] = [
DataItem(name: "Mon", value: 898),
DataItem(name: "Tue", value: 670),
DataItem(name: "Wed", value: 725),
DataItem(name: "Thu", value: 439),
DataItem(name: "Fri", value: 1232),
DataItem(name: "Sat", value: 771),
DataItem(name: "Sun", value: 365)
]

var body: some View {
VStack {
Text("Sample Bar Chart")
.font(.title)

BarChartView(
title: "Daily step count", data: chartData)
.frame(width: 350, height: 500, alignment: .center)

Spacer()
}
}
}

更新 BarChartView? 使數據可以作為參數傳遞到 ChartAreaView

struct BarChartView: View {
var title: String
var data: [DataItem]

var body: some View {
GeometryReader { gr in
let headHeight = gr.size.height * 0.10
VStack {
ChartHeaderView(title: title, height: headHeight)
ChartAreaView(data: data)
}
}
}
}

更新后的 BarChartView? 需要一個 DataItem? 的列表。GeometryReader 被用來確定條形圖的可用高度。數據中的最大值得到后并傳遞給每個 BarView?。主圖表區域保持原來的圓角矩形,并以水平堆疊的方式疊加一系列條形,每個 DataItem 一個。

struct ChartAreaView: View {
var data: [DataItem]

var body: some View {
GeometryReader { gr in
let fullBarHeight = gr.size.height * 0.90
let maxValue = data.map { $0.value }.max()!

ZStack {
RoundedRectangle(cornerRadius: 5.0)
.fill(Color(#colorLiteral(red: 0.8906477705, green: 0.9005050659, blue: 0.8208766097, alpha: 1)))

VStack {
HStack(spacing:0) {
ForEach(data) { item in
BarView(
name: item.name,
value: item.value,
maxValue: maxValue,
fullBarHeight: Double(fullBarHeight))
}
}
.padding(4)
}

}
}
}
}

為  BarView 創建一個新的試圖,該視圖為每條數據創建一個條形圖。它需要每一條數據的名稱和值以及最大值和可用的條形高度。每個條形圖都表示為圓角矩形,條形高度相對于最大條形高度設置。條形的顏色設置為純藍色。

struct BarView: View {
var name: String
var value: Double
var maxValue: Double
var fullBarHeight: Double

var body: some View {
let barHeight = (Double(fullBarHeight) / maxValue) * value
VStack {
Spacer()
ZStack {
VStack {
Spacer()
RoundedRectangle(cornerRadius:5.0)
.fill(Color.blue)
.frame(height: CGFloat(barHeight), alignment: .trailing)
}

VStack {
Spacer()
Text("\(value, specifier: "%.0F")")
.font(.footnote)
.foregroundColor(.white)
.fontWeight(.bold)
}
}
Text(name)
}
.padding(.horizontal, 4)
}
}

圖片

屏幕旋轉

條形圖在使用樣本數據時看起來不錯。圖表會調整到適合它所處的容器視圖之中。同樣的圖表可以放到任何沒有其他視圖的新試圖上,當設備旋轉時,圖標將會充滿空間并調整大小。

struct ChartView3: View {
var body: some View {
VStack() {

BarChartView(
title: "Daily step count", data: chartData)

Spacer()
}
.padding()
}
}

圖片

手機旋轉時顯示的圖表

真實數據的條形圖

給條形圖使用真實世界的數據。聯合國兒童基金會數據集中五歲以下兒童死亡率最高的十個國家。

五歲以下兒童死亡率:

指從出生到五歲之間死亡的概率,每1000名活產嬰兒

2019年特定國家五歲以下兒童死亡率估計數

ISO Code

Country Name

2019

NGA

Nigeria

117.2

SOM

Somalia

116.9

TCD

Chad

113.7

CAF

Central African Republic

110.0

SLE

Sierra Leone

109.2

GIN

Guinea

98.8

SSD

South Sudan

96.2

MLI

Mali

94.0

BEN

Benin

90.2

BFA

Burkina Faso

87.5

LSO

Lesotho

86.4

可以看出,國家名稱比示例數據中一周中的幾天使用多個數據名稱要長的多。數據使用國家名稱在條形圖中繪制。

struct ChartView4: View {
let chartData: [DataItem] = [
DataItem(name: "Nigeria", value: 117.2),
DataItem(name: "Somalia", value: 116.9),
DataItem(name: "Chad", value: 113.7),
DataItem(name: "Central African Republic", value: 110.0),
DataItem(name: "Sierra Leone", value: 109.2),
DataItem(name: "Guinea", value: 98.8),
DataItem(name: "South Sudan", value: 96.2),
DataItem(name: "Mali", value: 94.0),
DataItem(name: "Benin", value: 90.2),
DataItem(name: "Burkina Faso", value: 87.5)
]

var body: some View {
VStack() {

BarChartView(
title: "Under Five Mortality Rates in 2019", data: chartData)
.frame(width: 350, height: 500, alignment: .center)

Text("Under-five mortality rate:")
Text("is the probability of dying between birth and exactly 5 years of age, expressed per 1,000 live births.")

Spacer()
}
.padding()
}
}

這里對 BarView 做出了一些改動。條形圖上的值使用疊加視圖修改移到了條形圖的頂部。這個值是偏移的,所以文本不會離條形圖的頂部太近。數據名稱的字體大小和字重也可以被設置。向國家名稱那樣較長的文本,顯示出條形圖下面的文本將條形圖推到了線外。文本視圖的寬度被限制在條形圖寬度的范圍內,而且條形圖的標簽文本會被截斷,條形圖的文本視圖也被限制在條形寬度的范圍內,并且文本可以被隱藏起來。

struct BarView: View {
var name: String
var value: Double
var maxValue: Double
var fullBarHeight: Double

var body: some View {
GeometryReader { gr in
let barHeight = (Double(fullBarHeight) / maxValue) * value
let textWidth = gr.size.width * 0.80
VStack {
Spacer()
RoundedRectangle(cornerRadius:5.0)
.fill(Color.blue)
.frame(height: CGFloat(barHeight), alignment: .trailing)
.overlay(
Text("\(value, specifier: "%.0F")")
.font(.footnote)
.foregroundColor(.white)
.fontWeight(.bold)
.frame(width: textWidth)
.offset(y:10)
,
alignment: .top
)

Text(name)
.font(.system(size: 11))
.fontWeight(.semibold)
.lineLimit(1)
.frame(width: textWidth)
}
.padding(.horizontal, 4)
}
}
}

圖片

所有的國家名稱都被截斷了,所以將數據更代為使用國家碼而不是國家名稱。圖標被設置為固定大小,視圖被嵌入到 ScrollView 中,以便在設備旋轉時滾動。

struct ChartView5: View {
let chartData: [DataItem] = [
DataItem(name: "NGA", value: 117.2),
DataItem(name: "SOM", value: 116.9),
DataItem(name: "TCD", value: 113.7),
DataItem(name: "CAF", value: 110.0),
DataItem(name: "SLE", value: 109.2),
DataItem(name: "GIN", value: 98.8),
DataItem(name: "SSD", value: 96.2),
DataItem(name: "MLI", value: 94.0),
DataItem(name: "BEN", value: 90.2),
DataItem(name: "BFA", value: 87.5)
]

var body: some View {
ScrollView {
VStack() {

BarChartView(
title: "Countries with the highest Under Five Mortality Rates in 2019", data: chartData)
.frame(width: 350, height: 500, alignment: .center)

Spacer().frame(height:20)

VStack() {
Text("Under-five mortality rate:")
.font(.system(.title2, design:.rounded))
.fontWeight(.bold)
Text("is the probability of dying between birth and exactly 5 years of age, expressed per 1,000 live births.")
.font(.body)
}
.frame(width: 300, height: 130)
.background(Color(#colorLiteral(red: 0.8906477705, green: 0.9005050659, blue: 0.8208766097, alpha: 1)))
.cornerRadius(10)

Spacer()
}
.padding()
}
}
}

圖片

結語

在 SwiftUI 中組合矩形來創建條形圖是比較容易的。SwiftUI 是一個很好的平臺,用于創建視圖和快速重構獨立的子視圖。在 SwiftUI 中構建條形圖需要做一些工作,隨著使用數據來試用條形圖,可以確定更多的定制化。使用 GeometryReader 可以創建適應更多可用環境的條形圖。在這篇文章中,我們創建了一個簡單的條形圖,有數值,下面有標簽,還有圖表的標題,下一步就是分離出 x 軸和 y 軸。

責任編輯:武曉燕 來源: Swift社區
相關推薦

2022-03-15 07:55:09

JavaScript線性儀表圖開發

2020-03-28 16:08:32

條形圖Python分析

2020-06-17 08:35:12

數據分析Python代碼

2015-04-09 11:05:55

openstack公有云openstack鏡像

2020-07-13 07:00:21

Kubernetes

2019-05-14 11:00:07

LinuxSSH別名

2011-05-04 09:11:30

RPM包Linux

2023-02-06 17:49:35

Linux符號鏈接

2023-11-30 20:51:26

多子圖布局matplotlib

2009-11-23 20:05:29

ibmdwLotus

2018-01-26 09:02:30

LinuxPDF創建視頻

2023-09-27 23:24:50

C++鏈表

2020-07-20 07:00:00

KubernetesHostPath

2019-07-30 10:33:01

2021-05-10 15:14:23

Python棒棒糖圖表

2009-07-15 16:18:08

JSci.swing包

2023-03-15 09:00:43

SwiftUISlider

2025-06-10 08:00:00

Pygalpython

2020-07-09 13:10:42

GIMP曲線文本應用

2021-02-18 17:00:52

Linux歸檔文件
點贊
收藏

51CTO技術棧公眾號

天堂在线资源网| 国产高潮流白浆| 欧美精品高清| 亚洲天堂免费在线观看视频| 97se亚洲综合| 老熟妇仑乱一区二区av| 97偷自拍亚洲综合二区| 欧美va亚洲va在线观看蝴蝶网| 成 年 人 黄 色 大 片大 全| 国产三区四区在线观看| 国产精品资源网| 8090成年在线看片午夜| 福利视频第一页| 色老板在线视频一区二区| 69久久99精品久久久久婷婷 | 国产69久久精品成人| 少妇愉情理伦三级| 欧美sss在线视频| 欧美精品粉嫩高潮一区二区| 欧美牲交a欧美牲交| 成人福利片网站| 国产欧美日韩在线| 精品久久久久久中文字幕动漫 | 久久99精品久久久久久动态图 | 中文字幕久久亚洲| 小毛片在线观看| 日本在线成人| 欧美色综合久久| 日本日本19xxxⅹhd乱影响| 操你啦在线视频| 国产欧美精品一区aⅴ影院| 国内精品二区| 性色av蜜臀av| 另类欧美日韩国产在线| 青草成人免费视频| 日韩污视频在线观看| 国产精品传媒精东影业在线| 亚洲精选在线观看| avtt香蕉久久| 超碰一区二区三区| 欧美一级理论性理论a| 校园春色 亚洲色图| 欧美黄色网页| 一本久久a久久精品亚洲| 黄色一级视频片| 黑人玩欧美人三根一起进| 亚洲精品一二三| 色香蕉在线观看| 97超碰人人在线| 中文字幕精品一区| 日日骚一区二区网站| 男人天堂网在线观看| av一本久道久久综合久久鬼色| 成人精品一二区| 精品国产免费无码久久久| 黑人精品欧美一区二区蜜桃 | 国产深夜男女无套内射| 狂野欧美性猛交xxxxx视频| 亚洲精品自拍动漫在线| 久久久成人精品一区二区三区| 日本高清在线观看wwwww色| 国产精品久久久久毛片软件| 在线一区高清| 在线免费观看a视频| 一区二区三区免费观看| 亚洲精品久久久久久久蜜桃臀| 尤物yw193can在线观看| 亚洲综合色区另类av| 日韩精品视频在线观看视频| 国产99在线观看| 日韩欧美在线视频| 青青青在线视频免费观看| 国产精品久久亚洲不卡| 欧美日韩午夜精品| 可以看的av网址| 欧美一级三级| 亚洲色图国产精品| 可以免费看av的网址| 欧美激情性爽国产精品17p| 久久久亚洲精选| 手机在线看片1024| 青青草国产精品亚洲专区无| 95av在线视频| 天堂av手机版| 中文幕一区二区三区久久蜜桃| 亚洲一二三区精品| 免费男女羞羞的视频网站在线观看| 性感美女极品91精品| 九九热在线免费| 欧美另类中文字幕| 精品小视频在线| 国精产品久拍自产在线网站| 欧美日韩午夜| 国产va免费精品高清在线观看| 91无套直看片红桃| a级精品国产片在线观看| 婷婷久久五月天| 日韩经典av| 在线国产电影不卡| 国模大尺度视频| 久久91麻豆精品一区| 久久精品美女视频网站| 欧美日韩一二三四区| 国产在线一区观看| 欧美日韩精品免费看 | 久久免费国产视频| 日本视频网站在线观看| 国产馆精品极品| 天堂资源在线亚洲视频| 超碰成人av| 日韩一区二区高清| 国产视频不卡在线| 9色精品在线| 99re6在线| 素人av在线| 色综合天天综合色综合av| 一个人看的视频www| 精品少妇av| 午夜精品福利在线观看| 国产视频在线观看视频| 日本一区二区成人| 日韩在线视频在线观看| 亚洲乱码一区| 久久精品国产清自在天天线| 无码人妻精品一区二区三区蜜桃91| 国产成人精品一区二区三区四区 | 日本高清一区| 1区2区3区在线| 日韩视频永久免费| 欧美色图17p| 三级久久三级久久| 免费久久一级欧美特大黄| aa级大片免费在线观看| 日韩欧美电影一区| 精品国产精品国产精品| 老司机免费视频一区二区三区| 欧美另类视频在线| xxxxxx欧美| 日韩精品视频中文在线观看| 国产午夜小视频| 成人性生交大合| 国产精品av免费观看| 人人爱人人干婷婷丁香亚洲| zzijzzij亚洲日本成熟少妇| 伊人亚洲综合网| 国产精品视频yy9299一区| 妓院一钑片免看黄大片| 国产精品嫩模av在线| 日本电影亚洲天堂| 欧美日韩影视| 91福利在线观看| 天天躁夜夜躁狠狠是什么心态| 国产一区二区你懂的| 精品产品国产在线不卡| av资源在线播放| 亚洲成成品网站| 亚洲精品77777| 91一区二区在线观看| 精品少妇一区二区三区在线| 五月国产精品| 国产精品九九九| 午夜视频在线| 欧美一区二区不卡视频| 久久精品第一页| av资源站一区| 国产激情在线观看视频| 四季av在线一区二区三区| 亚洲伊人久久综合| 爱啪啪综合导航| 国产亚洲美女久久| 一女二男一黄一片| 亚洲综合免费观看高清完整版| 看全色黄大色黄女片18| 午夜综合激情| 一区二区欧美日韩| 深夜福利一区二区三区| 97av在线影院| 女女色综合影院| 亚洲第一精品夜夜躁人人躁| 波多野结衣激情视频| 中文字幕中文字幕中文字幕亚洲无线| 北条麻妃亚洲一区| 国产日韩高清一区二区三区在线| 欧美黑人xxxxx| 一区二区三区日本视频| 久久久伊人欧美| 成人资源www网在线最新版| 日韩一级成人av| 亚洲成人第一网站| 自拍偷拍国产亚洲| 色婷婷av777| 国产一区二区三区免费播放| 黄色免费视频大全| 小小影院久久| 美女精品国产| 欧美日韩国产一区二区在线观看| 国产91精品久久久久久| 国产在线高清视频| 亚洲男子天堂网| 国产色在线视频| 日本韩国一区二区三区| 国产亚洲欧美久久久久| 中文文精品字幕一区二区| 黄色激情在线观看| 久久99久久久久| 日本黄网站免费| 国产一区二区中文| 一区二区三区欧美成人| 亚洲人成亚洲精品| http;//www.99re视频| av在线不卡精品| 国外成人在线播放| 最新超碰在线| 中文字幕在线观看日韩| 天堂在线中文字幕| 日韩美女天天操| 一级久久久久久久| 色国产精品一区在线观看| 国产午夜精品一区二区理论影院| 国产精品国产三级国产| 国产成人av一区二区三区不卡| 大尺度一区二区| 国产裸体视频网站| 精品夜夜嗨av一区二区三区| 激情婷婷综合网| 国产美女精品| 成年人午夜免费视频| 欧美精品aa| 亚洲精品天堂成人片av在线播放 | 久久在线中文字幕| 欧美一区二区| 综合视频在线观看| 久久福利综合| 亚洲国产午夜伦理片大全在线观看网站 | 又色又爽又黄18网站| 久久精品国产精品亚洲精品| 无码少妇一区二区三区芒果| 视频一区二区三区入口| 播放灌醉水嫩大学生国内精品| 国内揄拍国内精品久久| 中文字幕日韩精品无码内射| 亚洲一区色图| 永久免费在线看片视频| 911精品美国片911久久久| www.午夜色| 91精品1区| 欧美精品一区二区性色a+v| 91av精品| 久久久国内精品| 国产精品分类| 五月丁香综合缴情六月小说| 亚洲精品麻豆| 欧美网站免费观看| 久久婷婷麻豆| 一道本视频在线观看| 久久se这里有精品| 涩涩网站在线看| 国产精品18久久久久久久久久久久 | 日韩精品丝袜在线| 九色在线视频蝌蚪| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 久久在线中文字幕| 在线亚洲精品| 免费看a级黄色片| 另类中文字幕网| 毛毛毛毛毛毛毛片123| 成人激情视频网站| 少妇真人直播免费视频| 中文字幕在线不卡一区| 91麻豆免费视频网站| 亚洲国产综合色| 91在线视频在线观看| 在线观看亚洲一区| 国产精品久久久久久在线| 日韩欧美一二三四区| 女人18毛片水真多18精品| 亚洲乱码av中文一区二区| 国产午夜在线观看| 久久精品在线播放| free性护士videos欧美| 国产精品99久久久久久白浆小说| 亚洲精品毛片| 国产精选在线观看91| 久久综合欧美| 欧美精品在欧美一区二区| 香蕉久久久久久久av网站| 久久撸在线视频| 成人激情免费电影网址| 欧美成人短视频| 亚洲午夜精品久久久久久久久| 久草手机在线视频| 欧美美女喷水视频| 天堂中文网在线| 久久精品国产久精国产思思| 水蜜桃在线视频| 91最新国产视频| 国产乱码精品一区二区亚洲| 欧美做受777cos| 奇米777欧美一区二区| 91传媒理伦片在线观看| 中文字幕不卡一区| 国产又黄又爽又色| 欧美一激情一区二区三区| 毛片在线播放网址| 九九久久国产精品| 日韩精品一区二区三区av| 高清一区二区三区视频| 成人一二三区| 青青草原av在线播放| 国产成人在线电影| 日本黄色录像视频| 亚洲免费黄色网址| 婷婷综合五月天| 国产人妖一区二区| 亚洲色图av在线| 国产精选在线| 99国产超薄肉色丝袜交足的后果| 精品视频亚洲| 日本www在线播放| 国产成都精品91一区二区三| 国产又粗又猛又爽又黄的视频四季 | 手机在线免费av| 成人激情黄色网| 成人av动漫在线观看| 久久久久久久激情| gogo大胆日本视频一区| 九九久久免费视频| 91麻豆精品91久久久久久清纯 | 亚洲天堂手机版| 亚洲精品影视在线观看| 97人人在线视频| 91精品久久久久久蜜桃| 99精品网站| 亚州精品一二三区| 国产日韩精品视频一区| 久久夜色精品国产噜噜亚洲av| 亚洲第一精品电影| 大黄网站在线观看| 成人动漫在线观看视频| 欧美日本国产| 免费看三级黄色片| 亚洲精品日韩综合观看成人91| 一级特黄aa大片| 日韩最新中文字幕电影免费看| 激情小说亚洲| 亚洲黄色一区二区三区| 麻豆专区一区二区三区四区五区| 中文字幕伦理片| 欧美日本在线看| 麻豆视频在线观看免费| 91久久精品国产91性色| 亚洲综合激情在线| 91av免费观看| 亚洲国产日韩一级| 神宫寺奈绪一区二区三区| 午夜精品一区二区三区在线视频 | 亚洲变态欧美另类捆绑| 超碰在线中文字幕| 久久99精品久久久久久青青日本| 国产欧美三级| 无码人妻aⅴ一区二区三区69岛| 在线一区二区视频| 日韩在线资源| 国产91aaa| 国产视频一区三区| 国产伦理片在线观看| 欧美日本精品一区二区三区| 91在线中文| 国产综合动作在线观看| 日韩激情中文字幕| 人与动物性xxxx| 精品国产乱码久久久久久蜜臀| 欧美aa在线| 亚洲春色在线视频| 国产一区二区三区日韩| 国产污污视频在线观看| 国产亚洲欧洲在线| 动漫一区二区三区| 99久久国产综合精品五月天喷水| 26uuu成人网一区二区三区| 在线观看国产黄| 欧美大片免费观看| 久久av超碰| 中文字幕第66页| 精品人伦一区二区三区蜜桃免费| 成在在线免费视频| 国产精品久久久久免费| 石原莉奈一区二区三区在线观看| 色婷婷粉嫩av| 亚洲精品美女久久久久| 高清在线一区| 国产一区二区三区乱码| 久久久精品免费观看| 国产黄色片免费| 奇米四色中文综合久久| 91精品国产福利在线观看麻豆| 亚洲一区二区三区综合| 欧美久久久久久蜜桃| 大香伊人久久| 超碰在线免费观看97|