Skip to content

Commit 400cb4a

Browse files
committed
feat: 색상 hex 코드를 탭하면 랜덤으로 색상을 뽑도록 구현
1 parent 05289df commit 400cb4a

3 files changed

Lines changed: 26 additions & 4 deletions

File tree

DevLog/Presentation/Extension/Color+Hex.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@
88
import SwiftUI
99

1010
extension Color {
11+
static var randomValue: Color {
12+
Color(
13+
red: Double(Int.random(in: 0...255)) / 255,
14+
green: Double(Int.random(in: 0...255)) / 255,
15+
blue: Double(Int.random(in: 0...255)) / 255
16+
)
17+
}
18+
1119
init?(hexString: String) {
1220
let trimmedHex = hexString.trimmingCharacters(in: .whitespacesAndNewlines)
1321
let sanitizedHex = trimmedHex.hasPrefix("#") ? String(trimmedHex.dropFirst()) : trimmedHex
@@ -24,7 +32,7 @@ extension Color {
2432
self.init(red: red, green: green, blue: blue)
2533
}
2634

27-
var hexString: String? {
35+
var hexValue: String? {
2836
let uiColor = UIColor(self)
2937
var red: CGFloat = 0
3038
var green: CGFloat = 0

DevLog/Presentation/ViewModel/TodoManageViewModel.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ final class TodoManageViewModel: Store {
2727
case setShowAlert(Bool)
2828
case setCategoryName(String)
2929
case setCategoryColor(Color)
30+
case setRandomCategoryColor
3031
case saveUserCategory
3132
}
3233

@@ -87,7 +88,7 @@ final class TodoManageViewModel: Store {
8788
state.category = UserTodoCategory(
8889
id: UUID().uuidString.lowercased(),
8990
name: "",
90-
colorHex: "#0A84FF"
91+
colorHex: Color.randomValue.hexValue ?? "#000000"
9192
)
9293
state.showSheet = true
9394
case .moveItem(let from, let target):
@@ -143,7 +144,12 @@ final class TodoManageViewModel: Store {
143144
case .setCategoryColor(let color):
144145
guard var category = state.category else { break }
145146

146-
category.colorHex = color.hexString ?? "#0A84FF"
147+
category.colorHex = color.hexValue ?? "#000000"
148+
state.category = category
149+
case .setRandomCategoryColor:
150+
guard var category = state.category else { break }
151+
152+
category.colorHex = Color.randomValue.hexValue ?? "#000000"
147153
state.category = category
148154
case .saveUserCategory:
149155
guard let category = state.category else { break }

DevLog/UI/Home/TodoManageView.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,21 @@ struct TodoManageView: View {
127127
}
128128

129129
Section {
130-
let color = Color(hexString: viewModel.state.category?.colorHex ?? "#0A84FF") ?? .blue
130+
let color = Color(hexString: viewModel.state.category?.colorHex ?? "") ?? .randomValue
131131
ColorPicker(selection: Binding(
132132
get: { color },
133133
set: { viewModel.send(.setCategoryColor($0)) }
134134
), supportsOpacity: false) {
135135
Text(viewModel.state.category?.colorHex ?? "#")
136+
.overlay(alignment: .bottom) {
137+
Rectangle()
138+
.frame(height: 1)
139+
.offset(y: 1)
140+
}
136141
.foregroundStyle(color)
142+
.onTapGesture {
143+
viewModel.send(.setRandomCategoryColor)
144+
}
137145
}
138146
.pickerStyle(.palette)
139147
}

0 commit comments

Comments
 (0)