Skip to content

Commit 3339cac

Browse files
authored
Merge pull request #41 from OlegEremenko991/develop/refactorColors
- Убрал цвета для кнопок из ассетов - Сделал AdaptiveColorModifier для выбора цвета - Убрал HeaderForSheet внутрь ContentInSheet, потому что нигде больше не используется - Обновил отступы в сообщении про отсутствие доступа к геолокации - Поднял версию билда до 11
2 parents 4e969f4 + 6a2d3d2 commit 3339cac

File tree

8 files changed

+94
-116
lines changed

8 files changed

+94
-116
lines changed

SwiftUI-WorkoutApp.xcodeproj/project.pbxproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
671D7DEF282112140068E728 /* Text+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671D7DEE282112140068E728 /* Text+.swift */; };
2626
671D7DF1282117FF0068E728 /* UserViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671D7DF0282117FF0068E728 /* UserViewCell.swift */; };
2727
672609522977256900042226 /* CachedAcyncImage in Frameworks */ = {isa = PBXBuildFile; productRef = 672609512977256900042226 /* CachedAcyncImage */; };
28+
672609542977CCD300042226 /* AdaptiveColorModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672609532977CCD300042226 /* AdaptiveColorModifier.swift */; };
2829
67277C51296DC2DD009FC536 /* Complaint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67277C50296DC2DD009FC536 /* Complaint.swift */; };
2930
672BE762281FD4E300579183 /* AuthData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672BE761281FD4E300579183 /* AuthData.swift */; };
3031
672BE768281FD60F00579183 /* City.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672BE767281FD60F00579183 /* City.swift */; };
@@ -119,7 +120,6 @@
119120
679F3B0C296B0A3500BB3590 /* BlacklistOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 679F3B0B296B0A3500BB3590 /* BlacklistOption.swift */; };
120121
67A9C90528427D06005D6A36 /* SportsGroundFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A9C90428427D06005D6A36 /* SportsGroundFilter.swift */; };
121122
67A9C90828427DEA005D6A36 /* SportsGroundFilterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A9C90728427DEA005D6A36 /* SportsGroundFilterView.swift */; };
122-
67A9C90A2842833F005D6A36 /* HeaderForSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A9C9092842833F005D6A36 /* HeaderForSheet.swift */; };
123123
67B65DAD289E860E00FBAFCB /* ErrorFilterService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67B65DAC289E860E00FBAFCB /* ErrorFilterService.swift */; };
124124
67B78710281D6110008B104F /* LoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67B7870F281D6110008B104F /* LoginViewModel.swift */; };
125125
67B78712281D654C008B104F /* DefaultsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67B78711281D654C008B104F /* DefaultsService.swift */; };
@@ -181,6 +181,7 @@
181181
671D7DEE282112140068E728 /* Text+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Text+.swift"; sourceTree = "<group>"; };
182182
671D7DF0282117FF0068E728 /* UserViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserViewCell.swift; sourceTree = "<group>"; };
183183
672609502977250B00042226 /* CachedAcyncImage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = CachedAcyncImage; path = "SwiftUI-WorkoutApp/CachedAcyncImage"; sourceTree = "<group>"; };
184+
672609532977CCD300042226 /* AdaptiveColorModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveColorModifier.swift; sourceTree = "<group>"; };
184185
67277C50296DC2DD009FC536 /* Complaint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Complaint.swift; sourceTree = "<group>"; };
185186
672BE761281FD4E300579183 /* AuthData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthData.swift; sourceTree = "<group>"; };
186187
672BE767281FD60F00579183 /* City.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = City.swift; sourceTree = "<group>"; };
@@ -278,7 +279,6 @@
278279
679F3B0B296B0A3500BB3590 /* BlacklistOption.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlacklistOption.swift; sourceTree = "<group>"; };
279280
67A9C90428427D06005D6A36 /* SportsGroundFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SportsGroundFilter.swift; sourceTree = "<group>"; };
280281
67A9C90728427DEA005D6A36 /* SportsGroundFilterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SportsGroundFilterView.swift; sourceTree = "<group>"; };
281-
67A9C9092842833F005D6A36 /* HeaderForSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeaderForSheet.swift; sourceTree = "<group>"; };
282282
67B65DAC289E860E00FBAFCB /* ErrorFilterService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorFilterService.swift; sourceTree = "<group>"; };
283283
67B7870F281D6110008B104F /* LoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewModel.swift; sourceTree = "<group>"; };
284284
67B78711281D654C008B104F /* DefaultsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultsService.swift; sourceTree = "<group>"; };
@@ -473,7 +473,6 @@
473473
675846402965CC38000BA5E0 /* SheetWithHeader */ = {
474474
isa = PBXGroup;
475475
children = (
476-
67A9C9092842833F005D6A36 /* HeaderForSheet.swift */,
477476
675846412965CC55000BA5E0 /* ContentInSheet.swift */,
478477
);
479478
path = SheetWithHeader;
@@ -734,6 +733,7 @@
734733
67D9167D2838DC3E0098D3CB /* GenericListCell.swift */,
735734
679F3AFE29683EB300BB3590 /* RoundedButtonLabel.swift */,
736735
679F3B002968401700BB3590 /* AdaptiveRoundedRectangleModifier.swift */,
736+
672609532977CCD300042226 /* AdaptiveColorModifier.swift */,
737737
);
738738
path = Common;
739739
sourceTree = "<group>";
@@ -995,6 +995,7 @@
995995
6758463F2965B7F2000BA5E0 /* ImageDetailView.swift in Sources */,
996996
67D9168A2838F79D0098D3CB /* MessageResponse.swift in Sources */,
997997
6798AA4E280AF32A00DB76F1 /* SportsGround.swift in Sources */,
998+
672609542977CCD300042226 /* AdaptiveColorModifier.swift in Sources */,
998999
67419AD3282E7F84004F5339 /* RoundedDefaultImage.swift in Sources */,
9991000
672F2BE72832CD2A0000A193 /* EventViewCell.swift in Sources */,
10001001
67FBF64B283379D9008A7968 /* EventsListViewModel.swift in Sources */,
@@ -1040,7 +1041,6 @@
10401041
675EC64F2814126800C2E229 /* TextEntryView.swift in Sources */,
10411042
674D0623282A9896007E75C6 /* SearchUsersView.swift in Sources */,
10421043
6798AA8C280C390F00DB76F1 /* CountriesView.swift in Sources */,
1043-
67A9C90A2842833F005D6A36 /* HeaderForSheet.swift in Sources */,
10441044
67B65DAD289E860E00FBAFCB /* ErrorFilterService.swift in Sources */,
10451045
67C87FD828438F1600D6377D /* PhotoContainer.swift in Sources */,
10461046
675EC64B28128B7E00C2E229 /* SportsGroundGrade.swift in Sources */,
@@ -1316,7 +1316,7 @@
13161316
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
13171317
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
13181318
CODE_SIGN_STYLE = Automatic;
1319-
CURRENT_PROJECT_VERSION = 10;
1319+
CURRENT_PROJECT_VERSION = 11;
13201320
DEVELOPMENT_ASSET_PATHS = "SwiftUI-WorkoutApp/Preview\\ Content/PreviewContent.swift SwiftUI-WorkoutApp/Preview\\ Content";
13211321
DEVELOPMENT_TEAM = CR68PP2Z3F;
13221322
ENABLE_PREVIEWS = YES;
@@ -1352,7 +1352,7 @@
13521352
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
13531353
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
13541354
CODE_SIGN_STYLE = Automatic;
1355-
CURRENT_PROJECT_VERSION = 10;
1355+
CURRENT_PROJECT_VERSION = 11;
13561356
DEVELOPMENT_ASSET_PATHS = "SwiftUI-WorkoutApp/Preview\\ Content/PreviewContent.swift SwiftUI-WorkoutApp/Preview\\ Content";
13571357
DEVELOPMENT_TEAM = CR68PP2Z3F;
13581358
ENABLE_PREVIEWS = YES;

SwiftUI-WorkoutApp/Resources/Assets.xcassets/Colors/ButtonBackground.colorset/Contents.json

Lines changed: 0 additions & 33 deletions
This file was deleted.

SwiftUI-WorkoutApp/Resources/Assets.xcassets/Colors/ButtonTitle.colorset/Contents.json

Lines changed: 0 additions & 33 deletions
This file was deleted.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import SwiftUI
2+
3+
/// Модификатор для `foreground`/`background` цвета
4+
///
5+
/// Цвет меняется с черного на белый в зависимости от `@Environment(\.colorScheme)`
6+
struct AdaptiveColorModifier: ViewModifier {
7+
@Environment(\.colorScheme) private var colorScheme
8+
var cornerRadius: CGFloat = 8
9+
let mode: Mode
10+
11+
func body(content: Content) -> some View {
12+
switch mode {
13+
case .background:
14+
content.background(color.cornerRadius(cornerRadius))
15+
case .foreground:
16+
content.foregroundColor(color)
17+
}
18+
}
19+
}
20+
21+
extension AdaptiveColorModifier {
22+
enum Mode {
23+
/// `inverse`: `true` - цвет противоположный цветовой схеме, `false` - цвет совпадает с цветовой схемой
24+
case foreground(inverse: Bool = true)
25+
case background
26+
}
27+
}
28+
29+
private extension AdaptiveColorModifier {
30+
var color: Color {
31+
switch mode {
32+
case let .foreground(inverse):
33+
if inverse {
34+
return colorScheme == .light ? .white : .black
35+
} else {
36+
return colorScheme == .light ? .black : .white
37+
}
38+
case .background:
39+
return colorScheme == .light ? .black : .white
40+
}
41+
}
42+
}
43+
44+
extension View {
45+
func adaptiveColor(
46+
radius: CGFloat = 8,
47+
_ mode: AdaptiveColorModifier.Mode
48+
) -> some View {
49+
modifier(AdaptiveColorModifier(cornerRadius: radius, mode: mode))
50+
}
51+
}

SwiftUI-WorkoutApp/Screens/Common/AdaptiveRoundedRectangleModifier.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@ import SwiftUI
22

33
/// Стиль для лейбла черно-белой кнопки в зависимости от цветовой темы
44
///
5+
/// - `height`: `48`
56
/// - `maxWidth`: `.infinity`
67
/// - `font`: `.headline`
78
struct AdaptiveRoundedRectangleModifier: ViewModifier {
89
func body(content: Content) -> some View {
910
content
1011
.frame(height: 48)
1112
.frame(maxWidth: .infinity)
12-
.foregroundColor(Color("ButtonTitle"))
13+
.adaptiveColor(.foreground())
1314
.font(.headline)
14-
.background(Color("ButtonBackground").cornerRadius(8))
15+
.adaptiveColor(.background)
1516
}
1617
}
1718

@@ -26,6 +27,7 @@ struct AdaptiveRoundedRectangleModifier_Previews: PreviewProvider {
2627
static var previews: some View {
2728
Text("Какой-то текст")
2829
.roundedStyle()
30+
.padding()
2931
}
3032
}
3133
#endif

SwiftUI-WorkoutApp/Screens/Common/SheetWithHeader/ContentInSheet.swift

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,52 @@
11
import SwiftUI
22

3+
/// Обертка для представления контента в модальном окне с готовым хедером
34
struct ContentInSheet<Content: View>: View {
5+
@Environment(\.dismiss) private var dismiss
46
let title: String
57
var spacing: CGFloat? = nil
68
let content: () -> Content
79

810
var body: some View {
911
VStack(spacing: spacing) {
10-
HeaderForSheet(title: title)
12+
headerForSheet
1113
content()
1214
}
1315
}
1416
}
1517

18+
private extension ContentInSheet {
19+
var headerForSheet: some View {
20+
HStack {
21+
Text(title)
22+
.font(.title3)
23+
.fontWeight(.medium)
24+
Spacer()
25+
Button {
26+
dismiss()
27+
} label: {
28+
Circle()
29+
.frame(width: 30, height: 30)
30+
.adaptiveColor(radius: 0, .foreground(inverse: false))
31+
.opacity(0.6)
32+
.overlay {
33+
Image(systemName: "xmark")
34+
.imageScale(.medium)
35+
.adaptiveColor(radius: 0, .foreground())
36+
}
37+
}
38+
}
39+
.padding()
40+
}
41+
}
42+
1643
#if DEBUG
1744
struct ContentInSheet_Previews: PreviewProvider {
1845
static var previews: some View {
1946
ContentInSheet(title: "Header") {
2047
Text("Some content")
48+
.frame(maxWidth: .infinity, maxHeight: .infinity)
49+
.background(.yellow)
2150
}
2251
}
2352
}

SwiftUI-WorkoutApp/Screens/Common/SheetWithHeader/HeaderForSheet.swift

Lines changed: 0 additions & 38 deletions
This file was deleted.

SwiftUI-WorkoutApp/Screens/SportsGrounds/Map/SportsGroundsMapView.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,10 @@ private extension SportsGroundsMapView {
155155
VStack {
156156
Text(viewModel.locationErrorMessage)
157157
.frame(maxWidth: .infinity)
158-
.foregroundColor(Color("ButtonTitle"))
158+
.adaptiveColor(.foreground())
159159
.multilineTextAlignment(.center)
160-
.padding(.horizontal)
161-
.background(Color("ButtonBackground").cornerRadius(8))
160+
.padding(8)
161+
.adaptiveColor(.background)
162162
Button {
163163
viewModel.openAppSettings()
164164
} label: {

0 commit comments

Comments
 (0)