精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

黄色小说在线播放| 亚洲AV无码国产精品午夜字幕| 欧洲视频一区| 欧美顶级少妇做爰| 国产资源在线视频| 麻豆网站视频在线观看| 成人av免费在线| 国产精品普通话| 久久久国产成人| 精品国产91| 亚洲精品一区二区三区99| 国产三级日本三级在线播放| 七七久久电影网| 欧美韩日一区二区三区| 成人做爰66片免费看网站| 激情网站在线观看| 影音先锋久久| 久久精品中文字幕电影| 爱爱免费小视频| 欧洲亚洲精品| 色哟哟国产精品免费观看| 免费看日本黄色| 国产高清av在线| 不卡的av在线播放| 亚洲最大福利视频网| 中国一级特黄视频| 校园激情久久| 欧美激情一区二区三区成人| 亚洲一二三在线观看| 亚洲欧美日本伦理| 日韩成人xxxx| 蜜臀av粉嫩av懂色av| 91麻豆精品国产91久久久更新资源速度超快| 婷婷久久综合九色国产成人 | 免费观看污网站| 青青国产精品| 欧美视频一区在线| 亚洲 中文字幕 日韩 无码| 国产h片在线观看| 亚洲国产一二三| 久久香蕉视频网站| 伊人福利在线| 亚洲日本一区二区| 91手机视频在线| 日本三级在线播放完整版| 亚洲国产高清在线观看视频| 欧美亚洲国产免费| 你懂的在线免费观看| 91亚洲大成网污www| 精品乱子伦一区二区三区| 手机在线不卡av| 成人av午夜影院| 国产伦精品一区二区三区四区免费| 国产高清第一页| 国产精品伊人色| 51精品国产人成在线观看| 99热这里只有精品9| 国产成人精品1024| 国产精品中出一区二区三区| 五月天福利视频| 97se狠狠狠综合亚洲狠狠| 精品一区日韩成人| 久草在线网址| 国产精品二区一区二区aⅴ污介绍| 亚洲 国产 欧美一区| 久久视频www| 国产精品三级视频| 麻豆一区二区三区在线观看| 国产精品一区hongkong| 亚洲成人av电影在线| 午夜肉伦伦影院| 久久99久久99精品免观看软件| 欧美影视一区在线| 性欧美在线视频| 国产一区二区三区亚洲| 亚洲欧美成人网| 日韩av片在线免费观看| 亚洲人体av| 91精品国产精品| 这里只有精品国产| 国产乱码精品一区二区三区忘忧草| 成人国产1314www色视频| 天堂a中文在线| 91麻豆6部合集magnet| 亚洲乱码一区二区三区| 欧美黑人xx片| 欧美在线观看视频一区二区| 精品国产乱码久久久久久1区二区| 久久精品福利| 最近2019中文字幕第三页视频 | 亚洲午夜精品一区 二区 三区| 欧美丰满片xxx777| 日日夜夜狠狠操| 国产一区二区导航在线播放| 久久久久久99| 麻豆电影在线播放| 欧美天堂在线观看| 五月六月丁香婷婷| 久草精品在线| 欧美乱大交xxxxx另类电影| 天堂中文字幕在线观看| 国产在线视频一区二区| 女同一区二区| 日本h片在线观看| 欧美午夜精品免费| 日本少妇毛茸茸| 久久久久美女| 国产精品第一视频| 天堂av一区二区三区| 成人免费一区二区三区在线观看 | 中文字幕在线直播| 日韩女同互慰一区二区| 综合 欧美 亚洲日本| 国产欧美激情| 国产高清一区视频| 国产在线高潮| 欧美亚洲国产一区在线观看网站| 美女又爽又黄免费| 欧美久久一级| 国产日本欧美在线观看| 毛片在线播放网址| 欧美日韩国产一区二区| 日本黄大片一区二区三区| 校园春色另类视频| 久久免费少妇高潮久久精品99| 精品视频一二三区| 久久久久久久久久电影| 男人的天堂狠狠干| 成人在线超碰| 色综合久久久久久中文网| 国产一区二区三区四区视频| 久久亚洲精品小早川怜子| 91精品国产91久久久久麻豆 主演| 国产美女视频一区二区| 日韩在线视频一区| 91精品中文字幕| 国产精品污网站| 天天干天天干天天干天天干天天干| 精品一区免费| 欧美做受高潮电影o| 亚洲色图 校园春色| 婷婷久久综合九色综合绿巨人 | 欧美亚洲日本网站| 婷婷色在线观看| 婷婷成人激情在线网| 中文在线观看免费视频| 99精品福利视频| 精品国产91亚洲一区二区三区www| 国内在线免费视频| 亚洲国产成人精品电影| 精品在线视频免费| av午夜一区麻豆| 久久婷婷五月综合色国产香蕉| 亚洲专区视频| 国产精品久久久久久久久久尿 | 欧美黄色片在线观看| www.黄色国产| 精品av在线播放| 中文字幕丰满乱子伦无码专区| 视频一区中文字幕国产| 亚洲日本精品| 97精品资源在线观看| 欧美日韩ab片| 深夜福利视频网站| 日本丶国产丶欧美色综合| 天天躁夜夜躁狠狠是什么心态| 日本不卡中文字幕| 日韩人妻一区二区三区蜜桃视频| 超碰成人免费| 国产91九色视频| 日本免费在线视频| 欧美电影精品一区二区| 九九精品免费视频| 中文在线资源观看网站视频免费不卡| 中国黄色片一级| 亚洲高清毛片| 少妇免费毛片久久久久久久久| 国产高清亚洲| 66m—66摸成人免费视频| www免费网站在线观看| 日韩一区国产二区欧美三区| 成人精品免费在线观看| 亚洲国产精华液网站w| 色综合久久久无码中文字幕波多| 亚洲最黄网站| 中国一级黄色录像| 偷拍一区二区| 91在线视频九色| 在线观看涩涩| 久久伊人91精品综合网站| 无码国产精品一区二区色情男同 | 国内精品久久久久久久久| 国产高清在线看| 精品久久国产老人久久综合| 无码久久精品国产亚洲av影片| 亚洲精品国产一区二区精华液| 四虎影成人精品a片| 国产在线精品国自产拍免费| 欧美色图另类小说| 午夜精品剧场| 亚洲国产午夜伦理片大全在线观看网站 | 欧美性xxxx在线播放| 神马午夜精品91| 国产天堂亚洲国产碰碰| 国产国语老龄妇女a片| 奇米四色…亚洲| 欧美 日韩 激情| 欧美二区视频| 夜夜爽www精品| 久久99久久人婷婷精品综合| 草莓视频一区| 亚洲91在线| 国产精品久久9| 日本免费一区二区三区四区| 韩国美女主播一区| 91网在线看| 久久精品在线视频| 在线视频自拍| 亚洲最新中文字幕| 欧美美女色图| 亚洲国产另类 国产精品国产免费| 国产日韩一级片| 欧美美女一区二区在线观看| 亚洲图片欧美日韩| 在线观看日韩一区| 国产又大又黄又粗| 欧美日韩在线免费观看| 日韩三级视频在线| 亚洲成人中文在线| 激情综合网五月天| 一区二区三区四区精品在线视频| 一区二区三区在线播放视频| 国产拍揄自揄精品视频麻豆| 香蕉网在线播放| 91网址在线看| 亚洲午夜福利在线观看| 国产亚洲欧美中文| 真实乱视频国产免费观看| 2020日本不卡一区二区视频| 西西大胆午夜视频| 91在线视频官网| 中文字幕在线播放视频| 99精品国产99久久久久久白柏| 中文字幕天堂av| av在线不卡观看免费观看| v天堂中文在线| 91啪九色porn原创视频在线观看| 欲求不满的岳中文字幕| 久久午夜电影网| 亚洲精品午夜视频| 国产精品三级电影| 欧美丰满熟妇bbbbbb| 《视频一区视频二区| 青青草在线观看视频| 午夜精品影院在线观看| 日韩欧美大片在线观看| 91九色最新地址| 伊人网av在线| 日韩视频免费直播| 国产91绿帽单男绿奴| 亚洲精品电影网站| 邻居大乳一区二区三区| 日韩一区在线视频| 男女在线观看视频| 欧美一性一乱一交一视频| 国产精品字幕| 99久久综合狠狠综合久久止| 日韩在线影视| 亚洲v国产v| 午夜国产精品视频免费体验区| 99久久国产综合精品五月天喷水| 国产精品试看| 黄色一级片免费的| 成人一区二区在线观看| 日韩在线免费观看av| 自拍偷在线精品自拍偷无码专区| 久一区二区三区| 日本精品视频一区二区| 99在线精品视频免费观看软件| 精品国产乱码久久久久久浪潮| 久色视频在线| 欧美国产日韩一区二区三区| 在线亚洲人成| 亚洲最大激情中文字幕| 综合色就爱涩涩涩综合婷婷| 青青草原网站在线观看| 国产精品三上| aaaaaaaa毛片| 久久久国际精品| 国产一级aa大片毛片| 在线观看国产91| 国产小视频免费观看| 最近2019中文免费高清视频观看www99 | 亚洲激情欧美| 成年网站免费在线观看| 99re热视频这里只精品| 神马午夜精品91| 91国产丝袜在线播放| 亚洲AV无码精品国产| 尤物99国产成人精品视频| 精精国产xxxx视频在线中文版 | 一级黄色高清视频| 久久人人超碰精品| 久久综合加勒比| 欧美日韩国产美| 日韩欧美在线番号| 欧美激情a在线| 国产精品成人**免费视频| 青青草久久网络| 国产亚洲在线观看| 中文字幕av一区二区三区人妻少妇| 国产午夜精品一区二区三区嫩草| 豆国产97在线 | 亚洲| 91精品国产综合久久香蕉麻豆| 岛国在线大片| 日韩暖暖在线视频| 亚洲电影一级片| 99久久国产综合精品五月天喷水| 国产在线播精品第三| 亚洲欧洲综合网| 欧洲精品中文字幕| 久草在线青青草| 日本91av在线播放| 午夜先锋成人动漫在线| 青青草国产免费| 懂色av一区二区三区免费观看| 成人免费视频国产免费观看| 欧美酷刑日本凌虐凌虐| av色图一区| 国产精品一区二区三区免费视频| 国产午夜一区| 爱情岛论坛vip永久入口| 91看片淫黄大片一级在线观看| 欧美成人精品欧美一级乱黄| 亚洲精品在线免费播放| 激情网站在线| 国产精品yjizz| 激情综合久久| xxxwww国产| 欧美午夜无遮挡| 欧美日韩国产中文字幕在线| 日本久久91av| 欧美午夜精彩| 中文字幕第17页| 亚洲欧洲av在线| 国产三级第一页| 欧美激情在线视频二区| 国产精品超碰| 男人操女人免费软件| 国产丝袜在线精品| 影音先锋黄色网址| 久久综合电影一区| 91嫩草精品| 欧美网站免费观看| 国产欧美日韩在线| 91 中文字幕| 欧美国产日韩一区二区| 日韩三级视频| 污污视频网站免费观看| 国产精品久久久久国产精品日日| 国产精品人妻一区二区三区| 欧美日本精品在线| 亚洲宅男一区| 激情文学亚洲色图| 亚洲国产毛片aaaaa无费看| 三级网站免费观看| 国产精品福利观看| 亚洲精品va| 毛茸茸多毛bbb毛多视频| 在线观看欧美黄色| 影院在线观看全集免费观看| 精品国产福利| 美女视频黄免费的久久| 免费麻豆国产一区二区三区四区| 日韩成人小视频| 国内欧美日韩| 久草视频国产在线| 中文字幕欧美日本乱码一线二线| 国产三级伦理片| 欧洲一区二区视频| 亚洲成人三区| 国产精品亚洲无码| 日韩欧美在线1卡| 激情开心成人网| 丰满人妻一区二区三区53号| 久久久噜噜噜久久人人看| 国产精品嫩草影院精东| 欧美怡红院视频一区二区三区| 香蕉综合视频| 无码人妻精品一区二区三应用大全| 91精品婷婷国产综合久久性色| 日韩激情电影免费看| 久久99国产精品一区| 久久久综合精品| 草逼视频免费看| 国产精品视频免费在线观看| 日韩亚洲国产欧美| 日韩影院一区二区| 亚洲欧洲国产精品| 精品自拍偷拍|