Mercurial > public > lazybear
changeset 318:e7c3d68d8e22
Implementing AvatarCreator
author | Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com> |
---|---|
date | Sat, 27 Mar 2021 00:46:17 +0100 |
parents | 81962e90d05f |
children | 62d278295bb7 |
files | LazyBear.xcodeproj/project.pbxproj LazyBear.xcodeproj/project.xcworkspace/xcuserdata/dennis.xcuserdatad/UserInterfaceState.xcuserstate LazyBear/LazyBearApp.swift LazyBear/Views/Onboarding/Helpers/Avatar.swift LazyBear/Views/Onboarding/Helpers/AvatarCreator.swift LazyBear/Views/Onboarding/Helpers/EnvironmentSignUp.swift LazyBear/Views/Onboarding/SignUpView.swift LazyBear/Views/Onboarding/WelcomeView.swift |
diffstat | 8 files changed, 148 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/LazyBear.xcodeproj/project.pbxproj Sat Mar 27 00:45:57 2021 +0100 +++ b/LazyBear.xcodeproj/project.pbxproj Sat Mar 27 00:46:17 2021 +0100 @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 95201A2F260C9CAF007D5300 /* SignUpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95201A2E260C9CAF007D5300 /* SignUpView.swift */; }; - 95201A3E260CB20A007D5300 /* ListAvatarHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95201A3D260CB20A007D5300 /* ListAvatarHelper.swift */; }; 954D7EA7260BBA6600A13C50 /* WatchlistCompany+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 954D7EA5260BBA6600A13C50 /* WatchlistCompany+CoreDataClass.swift */; }; 954D7EA8260BBA6600A13C50 /* WatchlistCompany+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 954D7EA6260BBA6600A13C50 /* WatchlistCompany+CoreDataProperties.swift */; }; 954D7EAC260BBB2400A13C50 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 954D7EAB260BBB2400A13C50 /* HomeView.swift */; }; @@ -24,6 +23,8 @@ 958A735225E0170900FD7ECA /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 958A735125E0170900FD7ECA /* CloudKit.framework */; }; 95AD4A2D26078C1400498079 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95AD4A2C26078C1400498079 /* ContentView.swift */; }; 95AD4A38260794A800498079 /* WhatsNewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95AD4A37260794A800498079 /* WhatsNewView.swift */; }; + 95BF36AC260E954F00B29E41 /* Avatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95BF36AB260E954F00B29E41 /* Avatar.swift */; }; + 95BF36AF260E9D4100B29E41 /* AvatarCreator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95BF36AE260E9D4100B29E41 /* AvatarCreator.swift */; }; 95E512D32607B42200C283E0 /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95E512D22607B42200C283E0 /* WelcomeView.swift */; }; 95F1E091260CBD0B0076AE63 /* UserSettings+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95F1E08F260CBD0B0076AE63 /* UserSettings+CoreDataClass.swift */; }; 95F1E092260CBD0B0076AE63 /* UserSettings+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95F1E090260CBD0B0076AE63 /* UserSettings+CoreDataProperties.swift */; }; @@ -33,7 +34,6 @@ 950BA46B25E944F500D065EF /* Production.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Production.xcconfig; sourceTree = "<group>"; }; 950BA46C25E944FC00D065EF /* Sandbox.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Sandbox.xcconfig; sourceTree = "<group>"; }; 95201A2E260C9CAF007D5300 /* SignUpView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpView.swift; sourceTree = "<group>"; }; - 95201A3D260CB20A007D5300 /* ListAvatarHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListAvatarHelper.swift; sourceTree = "<group>"; }; 954D7EA5260BBA6600A13C50 /* WatchlistCompany+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WatchlistCompany+CoreDataClass.swift"; sourceTree = "<group>"; }; 954D7EA6260BBA6600A13C50 /* WatchlistCompany+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WatchlistCompany+CoreDataProperties.swift"; sourceTree = "<group>"; }; 954D7EAB260BBB2400A13C50 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = "<group>"; }; @@ -51,6 +51,8 @@ 958A735125E0170900FD7ECA /* CloudKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CloudKit.framework; path = System/Library/Frameworks/CloudKit.framework; sourceTree = SDKROOT; }; 95AD4A2C26078C1400498079 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; }; 95AD4A37260794A800498079 /* WhatsNewView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WhatsNewView.swift; sourceTree = "<group>"; }; + 95BF36AB260E954F00B29E41 /* Avatar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Avatar.swift; sourceTree = "<group>"; }; + 95BF36AE260E9D4100B29E41 /* AvatarCreator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarCreator.swift; sourceTree = "<group>"; }; 95E512D22607B42200C283E0 /* WelcomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeView.swift; sourceTree = "<group>"; }; 95F1E08F260CBD0B0076AE63 /* UserSettings+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserSettings+CoreDataClass.swift"; sourceTree = "<group>"; }; 95F1E090260CBD0B0076AE63 /* UserSettings+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserSettings+CoreDataProperties.swift"; sourceTree = "<group>"; }; @@ -79,8 +81,9 @@ 95201A40260CB50A007D5300 /* Helpers */ = { isa = PBXGroup; children = ( - 95201A3D260CB20A007D5300 /* ListAvatarHelper.swift */, 95531C78260CBECC00F0916A /* EnvironmentSignUp.swift */, + 95BF36AB260E954F00B29E41 /* Avatar.swift */, + 95BF36AE260E9D4100B29E41 /* AvatarCreator.swift */, ); path = Helpers; sourceTree = "<group>"; @@ -268,15 +271,16 @@ 954D7EA8260BBA6600A13C50 /* WatchlistCompany+CoreDataProperties.swift in Sources */, 95F1E091260CBD0B0076AE63 /* UserSettings+CoreDataClass.swift in Sources */, 95F1E092260CBD0B0076AE63 /* UserSettings+CoreDataProperties.swift in Sources */, + 95BF36AC260E954F00B29E41 /* Avatar.swift in Sources */, 95E512D32607B42200C283E0 /* WelcomeView.swift in Sources */, 954D7EB1260BBBEA00A13C50 /* UserHelper.swift in Sources */, 954D7EC6260BE84100A13C50 /* WatchlistPreviewHelper.swift in Sources */, + 95BF36AF260E9D4100B29E41 /* AvatarCreator.swift in Sources */, 95AD4A38260794A800498079 /* WhatsNewView.swift in Sources */, 95672B8F25DDA54700DCBE4A /* LazyBearApp.swift in Sources */, 954D7EA7260BBA6600A13C50 /* WatchlistCompany+CoreDataClass.swift in Sources */, 95672B9B25DDA54800DCBE4A /* LazyBear.xcdatamodeld in Sources */, 95531C79260CBECC00F0916A /* EnvironmentSignUp.swift in Sources */, - 95201A3E260CB20A007D5300 /* ListAvatarHelper.swift in Sources */, 95AD4A2D26078C1400498079 /* ContentView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0;
Binary file LazyBear.xcodeproj/project.xcworkspace/xcuserdata/dennis.xcuserdatad/UserInterfaceState.xcuserstate has changed
--- a/LazyBear/LazyBearApp.swift Sat Mar 27 00:45:57 2021 +0100 +++ b/LazyBear/LazyBearApp.swift Sat Mar 27 00:46:17 2021 +0100 @@ -16,6 +16,7 @@ if isAppAlreadyLaunchedOnce() { ContentView() .environment(\.managedObjectContext, persistenceController.container.viewContext) + } else { WelcomeView() .environment(\.managedObjectContext, persistenceController.container.viewContext)
--- a/LazyBear/Views/Onboarding/Helpers/Avatar.swift Sat Mar 27 00:45:57 2021 +0100 +++ b/LazyBear/Views/Onboarding/Helpers/Avatar.swift Sat Mar 27 00:46:17 2021 +0100 @@ -8,13 +8,48 @@ import SwiftUI struct Avatar: View { + var scaleMultipler: CGFloat + var backgroundHeight: CGFloat + @EnvironmentObject var environmentSignUp: EnvironmentSignUp + var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + environmentSignUp.background + .clipShape(Circle()) + .frame(maxWidth: backgroundHeight + 50, maxHeight: backgroundHeight) + .overlay( + Image("Head") + .scaleEffect(scaleMultipler) + .colorMultiply(environmentSignUp.skinTone) + ) + .overlay( + ZStack { + Image(environmentSignUp.hair) + .scaleEffect(scaleMultipler) + .offset(y: -5*scaleMultipler) + .colorMultiply(environmentSignUp.hairColor) + + Image(environmentSignUp.nose) + .scaleEffect(scaleMultipler) + + Image(environmentSignUp.eyes) + .scaleEffect(scaleMultipler) + .offset(y: -5*scaleMultipler) + + Image(environmentSignUp.mouth) + .scaleEffect(scaleMultipler) + .offset(y: 5*scaleMultipler) + + Image(environmentSignUp.body) + .scaleEffect(scaleMultipler) + .offset(y: 19*scaleMultipler) + .colorMultiply(environmentSignUp.bodyColor) + } + ) } } struct Avatar_Previews: PreviewProvider { static var previews: some View { - Avatar() + Avatar(scaleMultipler: 2, backgroundHeight: 100) } }
--- a/LazyBear/Views/Onboarding/Helpers/AvatarCreator.swift Sat Mar 27 00:45:57 2021 +0100 +++ b/LazyBear/Views/Onboarding/Helpers/AvatarCreator.swift Sat Mar 27 00:46:17 2021 +0100 @@ -7,14 +7,93 @@ import SwiftUI +enum AvatarComponent { + case hair, eyes, nose, mouth, body +} + struct AvatarCreator: View { + var components = ["Hair", "Eyes", "Nose", "Mouth", "Body"] + @State private var selectedComponent = "Hair" + var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + NavigationView { + VStack { + Avatar(scaleMultipler: 2, backgroundHeight: 200) + .padding(.top) + + Picker("Please choose a color", selection: $selectedComponent) { + ForEach(components, id: \.self) { + Text($0) + } + } + .pickerStyle(SegmentedPickerStyle()) + .padding() + + Divider() + ScrollView { +// if selectedComponent == "Hair" { showAvatar(component: .hair) } +// if selectedComponent == "Eyes" { showAvatar(component: .eyes) } +// if selectedComponent == "Nose" { showAvatar(component: .nose) } +// if selectedComponent == "Mouth" { showAvatar(component: .mouth) } +// if selectedComponent == "Body" { showAvatar(component: .body) } + } + } + .navigationTitle("Create your avatar") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button(action: { }) { + Text("Cancel") + } + } + ToolbarItem(placement: .navigationBarTrailing) { + Button(action: { }) { + Text("Done") + } + } + } + } } + +// private func showAvatar(component: AvatarComponent) -> AnyView { +// switch component { +// case .hair: +// return AnyView(HairView()) +// case .eyes: +// return AnyView(EyesView()) +// case .nose: +// return AnyView(NoseView()) +// case .mouth: +// return AnyView(MouthView()) +// case .body: +// return AnyView(BodyView()) +// } +// } } struct AvatarCreator_Previews: PreviewProvider { static var previews: some View { AvatarCreator() + .environmentObject(EnvironmentSignUp()) } } + +struct ComponentView: View { + var showColors: Bool + var numberOfColors: Int? + var numberOfItems: Int + + var body: some View { + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 20) { + ForEach((1..<8)) { index in + Circle() + .frame(width: 50, height: 50) + .foregroundColor(Color("hairColor\(index)")) + + } + } + .padding(.leading) + } + } +}
--- a/LazyBear/Views/Onboarding/Helpers/EnvironmentSignUp.swift Sat Mar 27 00:45:57 2021 +0100 +++ b/LazyBear/Views/Onboarding/Helpers/EnvironmentSignUp.swift Sat Mar 27 00:46:17 2021 +0100 @@ -8,7 +8,16 @@ import SwiftUI class EnvironmentSignUp: ObservableObject { + @Published var hideAvatarSelector = false @Published var username = "" - @Published var avatar = "random4" - @Published var hideAvatarSelector = false + @Published var body = "body1" + @Published var bodyColor = Color("custom2") + @Published var eyes = "eyes3" + @Published var facialHair = "facialHair4" + @Published var hair = "hair13" + @Published var hairColor = Color("hairColor1") + @Published var mouth = "mouth4" + @Published var nose = "nose2" + @Published var skinTone = Color("skinTone2") + @Published var background = Color("custom7") }
--- a/LazyBear/Views/Onboarding/SignUpView.swift Sat Mar 27 00:45:57 2021 +0100 +++ b/LazyBear/Views/Onboarding/SignUpView.swift Sat Mar 27 00:46:17 2021 +0100 @@ -25,7 +25,7 @@ .padding(.bottom) .opacity(0.6) - ProfileAvatar(size: geo.size.height * 0.3, showingAvatars: $showingAvatars) + ProfileAvatar(scaleMultipler: 2, backgroundHeight: 200, showingAvatars: $showingAvatars) .padding(.bottom) UserNameTextfield(username: $environmentSignUp.username) @@ -52,7 +52,7 @@ Alert(title: Text("Select a username"), message: Text("Need ideas? Try Stockmaster, or Financial lover"), dismissButton: .default(Text("Got it!"))) } .sheet(isPresented: $showingAvatars) { - ListAvatarHelper() + AvatarCreator() } } } @@ -63,7 +63,6 @@ } else { // Save settings to CLOUDKIT and show ContentView let userSettings = UserSettings(context: moc) - userSettings.avatar = environmentSignUp.avatar userSettings.username = environmentSignUp.username do { try moc.save() @@ -84,21 +83,17 @@ } struct ProfileAvatar: View { + var scaleMultipler: CGFloat + var backgroundHeight: CGFloat + @Binding var showingAvatars: Bool @EnvironmentObject var environmentSignUp: EnvironmentSignUp - @State var size: CGFloat - @Binding var showingAvatars: Bool var body: some View { HStack { - Spacer() + Spacer() ZStack(alignment: .topTrailing) { - Image(environmentSignUp.avatar) - .resizable() - .frame(maxWidth: size, maxHeight: size) - .scaledToFit() - .clipShape(Circle()) - .shadow(color: Color.black.opacity(0.2), radius: 10) - + Avatar(scaleMultipler: 2, backgroundHeight: 200) + .shadow(color: Color.gray.opacity(0.2), radius: 10) if !environmentSignUp.hideAvatarSelector { Button(action: { self.showingAvatars = true }) { Image(systemName: "photo") @@ -107,7 +102,7 @@ .background( Circle() .foregroundColor(Color("default")) - .shadow(color: Color.gray.opacity(0.3), radius: 10, x: 0.0, y: 0.0) + .shadow(color: Color.gray.opacity(0.2), radius: 10) ) .padding() }
--- a/LazyBear/Views/Onboarding/WelcomeView.swift Sat Mar 27 00:45:57 2021 +0100 +++ b/LazyBear/Views/Onboarding/WelcomeView.swift Sat Mar 27 00:46:17 2021 +0100 @@ -19,7 +19,8 @@ SignUpView() .environmentObject(environmentSignUp) } else { - ContentView() + SignUpView() + .environmentObject(environmentSignUp) } } else {