誰說程式設計師不懂浪漫,教你使用SwiftUI搭建一個電子相簿送給她吧~
theme: smartblue
攜手創作,共同成長!這是我參與「掘金日新計劃 · 8 月更文挑戰」的第12天,點選檢視活動詳情。
在本章中,你將學會使用SwiftUI
搭建一個電子相簿。
專案背景
每到七夕情人節、紀念日等節日,身為程式設計師的我們總是不知道該送什麼禮物表達心意,畢竟滿腦子裝的都是程式碼。
那我們能不能用程式碼做一個禮物送給心愛的那個她呢?
即能表達心意,又剛好碰上自己的專業領域。
說幹就幹。
專案搭建
首先,建立一個新的SwiftUI
專案,命名為ElectronicAlbum
。
素材匯入
首先,我們需要匯入一堆圖片作為展示的素材。我們在Assets.xcassets
檔案中匯入一批圖片,示例:
資料模型
素材匯入完成後,接下來我們建立資料模型,我們新增一個Swift
檔案,命名為Model.swift
。
``` import SwiftUI
struct Model:Identifiable { var id = UUID() var imageName: String }
//示例資料 var models = (1...6).map { Model(imageName:"($0)") } ```
上述程式碼中,我們聲明瞭一個結構體Model
,遵循Identifiable
協議。
在Model
結構體中,我們聲明瞭一個id
作為唯一識別符號,然後聲明瞭一個變數imageName
用來關聯圖片。
在之前我們已經匯入了一批圖片,並且圖片名稱為1~6
,因此我們可以宣告一個數組models
,通過map
建立示例資料。
頁面樣式
我們回到ContentView.swift
檔案,建立一個新檢視來展示圖片。示例:
// 圖片檢視
func imageCardView() -> some View {
ForEach(models) { item in
Image(item.imageName)
.resizable()
.aspectRatio(contentMode: .fit)
.cornerRadius(10)
.padding(.horizontal)
.shadow(color: .pink, radius: 5, x: 0, y: 0)
}
}
上述程式碼中,我們建立了一個新檢視imageCardView
。
在imageCardView
檢視中,我們使用ForEach
迴圈遍歷models
陣列中的資料,並賦值給Image
圖片。
圖片樣式部分,我們保持圖片原有aspectRatio
寬高比,加個cornerRadius
圓角,設定橫向padding
邊距,最後加了加了一個粉色的邊框。
基礎互動
頁面樣式完成後,我們需要左右滾動圖片檢視,可以使用到TabView
,示例:
var body: some View {
TabView {
imageCardView()
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
.background(Color(red: 254 / 255, green: 207 / 255, blue: 238 / 255)).edgesIgnoringSafeArea(.all)
}
上述程式碼中,我們在ContentView
檢視中使用TabView
構建了一個輪博檢視。
我們設定了PageTabViewStyle
樣式為隱藏輪播小圓點,然後設定了背景顏色為粉色。
我們預覽下效果:
互動進階
基礎互動我們完成基礎的輪播圖樣式,下一步為了讓互動更加優雅些,我們可以嘗試使用加入些3D切換的效果。
3D切換效果我們需要使用到rotation3DEffect
修飾符,而由於rotation3DEffect
旋轉角度接收Double
型別的數值,但我們檢視偏移修飾符接收的數值卻是CGFloat
型別,因此我們首先宣告一個方法進行型別轉換和設定旋轉互動的角度。
func getAngle(xOffset: CGFloat) -> Double {
let tempAngle = xOffset / (UIScreen.main.bounds.width / 2)
let rotationDegree: CGFloat = 30
return Double(tempAngle * rotationDegree)
}
上述程式碼中,我們聲明瞭一個方法getAngle
,接收一個CGFloat
型別的引數xOffset
,返回一個Double
型別的引數。
因為我們需要把每個檢視展示在中間,因此檢視切換角度tempAngle
為螢幕一半來計算角度,然後我們提供旋轉角度為30度,最後返回計算好的旋轉角度。
我們將rotation3DEffect
修飾符加到檢視中。
// 圖片檢視
func imageCardView() -> some View {
ForEach(models) { item in
GeometryReader { innerView in
Image(item.imageName)
.resizable()
.aspectRatio(contentMode: .fit)
.cornerRadius(10)
.padding(.horizontal)
.shadow(color: .pink, radius: 5, x: 0, y: 0)
.frame(width: innerView.frame(in: .global).width, height: innerView.frame(in: .global).height)
.rotation3DEffect(Angle(degrees: getAngle(xOffset: innerView.frame(in: .global).minX)),
axis: (x: 0.0, y: 1.0, z: 0.0),
anchor: innerView.frame(in: .global).minX > 0 ? .leading : .trailing,
perspective: 2.5
)
}
}
}
我們使用GeometryReader
幾何檢視來確定圖片滾動時的圖片的大小,然後使用frame
修飾符調整其滾動時的圖片大小變化,最後使用rotation3DEffect
修飾符,設定滾動時的角度變化。
專案預覽
恭喜你,完成了整個專案的全部內容!
快來動手試試吧。
如果本專欄對你有幫助,不妨點贊、評論、關注~
- 實戰教程·元宇宙來了,準備好你的電子名片了嗎?(一)
- 實戰教程·元宇宙來了,準備好你的電子名片了嗎?(八)
- 實戰教程·什麼年代了還在敲傳統木魚?(二)
- 實戰教程·元宇宙來了,準備好你的電子名片了嗎?(七)
- 實戰教程·元宇宙來了,準備好你的電子名片了嗎?(六)
- 實戰教程·元宇宙來了,準備好你的電子名片了嗎?(五)
- 實戰教程·元宇宙來了,準備好你的電子名片了嗎?(四)
- 實戰教程·元宇宙來了,準備好你的電子名片了嗎?(三)
- 實戰教程·元宇宙來了,準備好你的電子名片了嗎?(二)
- 實戰教程·什麼年代了還在敲傳統木魚?(一)
- 技術下午茶:產品經理是如何工作的?如何才算一份好的需求文件?如何設計一個簡單的列表,它應該具備哪些基本功能?
- 釋出&選擇釋出,使用SwiftUI搭建一個新建釋出彈窗(上)
- 釋出&選擇釋出,使用SwiftUI搭建一個新建釋出彈窗(下)
- 使用SwiftUI搭建一個風箏搖擺動畫,實現放風箏的夢想~
- SwiftUI100天:使用SwiftUI搭建一個計時器App
- 實戰程式設計·使用SwiftUI從0到1完成一款iOS筆記App(三)
- 初識MVVM·關於啟動頁、引導頁、登入頁的設計細節和互動邏輯
- 誰說程式設計師不懂浪漫,教你使用SwiftUI搭建一個電子相簿送給她吧~
- 實戰程式設計·刻在男人DNA裡的浪漫,空氣投籃(二)
- 實戰程式設計·使用SwiftUI從0到1完成一款iOS筆記App(四)