#27 android 的時間選擇 (swiftUI)

原本想說看能不能成雙成對,但好像還需要些時間😩😩
然後積了很多作業,該來消庫存了。。。

之前瞄到同事手機android鬧鐘的選擇時間,不得不說,好像android在UI某些方面好像比蘋果還好耶!? 如圖:

可以拖曳時針調整時間,感覺更有科技感,比起蘋果的xxx Picker咳咳咳 當我沒說¯\_(ツ)_/¯ ¯\_(ツ)_/¯

接下來就試著做一個~

實現功能:
1. 首頁顯示當前時間
2. 拖曳球球選擇小時時間
3. 當放開球球時變成選擇分鐘的時間
4. 可以自行選擇am, pm

使用MVC:

建立一個DateViewModel是一個 ObservableObject 類別用來管理日期和時間的狀態,其中包含 generateTime() 方法來儲存選擇的時間,並隱藏時間選擇器以及 setTime() 方法來設置當前選擇的時間。

Basic:
dateModel.showPickertrue 時,VStack 中的內容將會覆蓋 Text(dateModel.selectDate, style: .time)。

TimeSlider:
是自定義的android時鐘,概念有點像我們之前做的國旗、圓餅圖
使用 GeometryReader 獲取滑桿的尺寸,並使用 DragGesture 來更新角度。

GeometryReader 是 SwiftUI 中的一個視圖,用於讀取和響應其子視圖的幾何信息。它允許獲取子視圖的尺寸和位置,並根據這些信息動態調整佈局。

DragGesture 是一個手勢修飾符,附加到視圖上以監聽拖動手勢,可以參考以下範例。

struct DragGestureExample: View {
@State private var offset = CGSize.zero

var body: some View {
Text("Drag me")
.offset(x: offset.width, y: offset.height)
.gesture(
DragGesture()
.onChanged { value in
self.offset = value.translation
}
.onEnded { _ in
self.offset = .zero
}
)
}
}
// DragGesture().onChanged 和 DragGesture().onEnded 是用來處理拖動手勢的事件。
// value.translation 是一個 CGSize,表示從拖動手勢開始以來的偏移量。
// 當拖動手勢發生變化時,onChanged 閉包會被調用,並更新 offset 屬性。
// 當拖動手勢結束時,onEnded 閉包會被調用,並將 offset 重置為零。

詳細可以參考專案~

Here’s my GitHub repository link:

--

--