diff --git a/AcaMate.xcodeproj/project.pbxproj b/AcaMate.xcodeproj/project.pbxproj index 136c26e..565a7a3 100644 --- a/AcaMate.xcodeproj/project.pbxproj +++ b/AcaMate.xcodeproj/project.pbxproj @@ -324,7 +324,7 @@ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited) DEV"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited) DEV LOCAL"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; diff --git a/AcaMate.xcodeproj/project.xcworkspace/xcuserdata/tanine.xcuserdatad/UserInterfaceState.xcuserstate b/AcaMate.xcodeproj/project.xcworkspace/xcuserdata/tanine.xcuserdatad/UserInterfaceState.xcuserstate index 70f6aa0..8ec71a9 100644 Binary files a/AcaMate.xcodeproj/project.xcworkspace/xcuserdata/tanine.xcuserdatad/UserInterfaceState.xcuserstate and b/AcaMate.xcodeproj/project.xcworkspace/xcuserdata/tanine.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/AcaMate/0. Setup/SwiftUI_Prefix.swift b/AcaMate/0. Setup/SwiftUI_Prefix.swift index 08b2fb3..1af516c 100644 --- a/AcaMate/0. Setup/SwiftUI_Prefix.swift +++ b/AcaMate/0. Setup/SwiftUI_Prefix.swift @@ -7,9 +7,10 @@ import SwiftUI // MARK: - ACAMATE // APPSTORE_URL : https://apps.apple.com/us/app/%EC%95%84%EC%B9%B4%EB%8D%B0%EB%AF%B8%EB%A9%94%EC%9D%B4%ED%8A%B8/id6739448113 -#if DEV && LOCAL -public let API_URL: String = "http://localhost:5144" -#elseif DEV +//#if DEV && LOCAL +//public let API_URL: String = "http://localhost:5144" +//#else +#if DEV public let API_URL: String = "https://devacamate.ipstein.myds.me" #else public let API_URL: String = "https://acamate.ipstein.myds.me" diff --git a/AcaMate/1. View/10. Common/OffsetObservableScollView.swift b/AcaMate/1. View/10. Common/OffsetObservableScollView.swift new file mode 100644 index 0000000..3575257 --- /dev/null +++ b/AcaMate/1. View/10. Common/OffsetObservableScollView.swift @@ -0,0 +1,74 @@ +// +// OffsetObservableScollView.swift +// AcaMate +// +// Created by TAnine on 2/10/25. +// + +import SwiftUI +import Combine + +struct OffsetObservableScrollView: View { + var axes: Axis.Set = .vertical + var showsIndicators: Bool = true + + @Binding var scrollOffset: CGPoint + @ViewBuilder var content: (ScrollViewProxy) -> Content + + @Namespace var coordinateSpaceName: Namespace.ID + + init( + _ axes: Axis.Set = .vertical, + showsIndicators: Bool = true, + scrollOffset: Binding, + @ViewBuilder content: @escaping (ScrollViewProxy) -> Content + ) { + self.axes = axes + self.showsIndicators = showsIndicators + self._scrollOffset = scrollOffset + self.content = content + } + + var body: some View { + ScrollView(axes, showsIndicators: showsIndicators) { + ScrollViewReader { scrollViewProxy in + VStack(spacing: 0) { + // 맨 위로 스크롤하기 위한 anchor 뷰 (id "TOP") + Color.clear + .frame(height: 1) + .id("TOP") + + // 실제 콘텐츠. content 클로저에서 scrollViewProxy를 전달받으므로, + // 버튼 등을 통해 프로그래밍적으로 스크롤할 수 있음. + content(scrollViewProxy) + .overlay { + GeometryReader { geometryProxy in + Color.clear + .preference( + key: ScrollOffsetPreferenceKey.self, + value: CGPoint ( + x: -geometryProxy.frame(in: .named(coordinateSpaceName)).minX, + y: -geometryProxy.frame(in: .named(coordinateSpaceName)).minY + ) + ) + } + } + } + } + } + .coordinateSpace(name: coordinateSpaceName) + .onPreferenceChange(ScrollOffsetPreferenceKey.self) { value in + printLog("\(scrollOffset) -> \(value)") + scrollOffset = value + + } + } +} + +struct ScrollOffsetPreferenceKey: PreferenceKey { + static var defaultValue: CGPoint = .zero + + static func reduce(value: inout CGPoint, nextValue: () -> CGPoint) { + value = nextValue() + } +} diff --git a/AcaMate/1. View/11. Intro & Login/IntroView.swift b/AcaMate/1. View/11. Intro & Login/IntroView.swift index b5d5777..f246290 100644 --- a/AcaMate/1. View/11. Intro & Login/IntroView.swift +++ b/AcaMate/1. View/11. Intro & Login/IntroView.swift @@ -39,6 +39,9 @@ struct IntroView: View { .onAppear { printLog("IntroView_onAppear") + #if LOCAL + naviState.set(act: .RESET, path: .Login) + #else subscribeAlertAction() loadVersion() .sink { completion in @@ -66,7 +69,7 @@ struct IntroView: View { } } .store(in: &cancellables) - + #endif } } diff --git a/AcaMate/1. View/12. Main/122. DashBoard/AttendanceView.swift b/AcaMate/1. View/12. Main/122. DashBoard/AttendanceBoxView.swift similarity index 69% rename from AcaMate/1. View/12. Main/122. DashBoard/AttendanceView.swift rename to AcaMate/1. View/12. Main/122. DashBoard/AttendanceBoxView.swift index a7b36fb..12590be 100644 --- a/AcaMate/1. View/12. Main/122. DashBoard/AttendanceView.swift +++ b/AcaMate/1. View/12. Main/122. DashBoard/AttendanceBoxView.swift @@ -7,49 +7,24 @@ import SwiftUI -struct AttendanceView: View { - @StateObject var btnVM = ButtonViewModel() - @State private var attMoreBtnID = UUID() - +struct AttendanceBoxView: View { @State var monthlyGroup: (Int,Int) = (5,10)//(0,0) @State var dailyGroup: (Int,Int) = (3,4)//(0,0) var body: some View { - VStack(spacing: 0) { - HStack(spacing: 0){ - Image(.Icon.attendance) - .resizable() - .frame(width: 24, height: 24, alignment: .center) - .padding([.trailing],4) - Text("출석") - .font(.nps(font: .bold, size: 20)) - .foregroundStyle(Color(.Text.detail)) - Spacer() - SimpleBtnView(vm: btnVM, id: attMoreBtnID) - } - .padding([.bottom],2) - - Rectangle() - .frame(maxWidth: .infinity, maxHeight: 2) - .foregroundStyle(Color(.Second.normal)) - .padding([.bottom],12) - + DashBoardView(image: Image(.Icon.attendance), + title: "출석") + { HStack(spacing: 4) { AttCellView(isDaily: false, valueGroup: $monthlyGroup) Spacer() -// Spacer(minLength: 1) AttCellView(isDaily: true, valueGroup: $dailyGroup) } .frame(maxWidth: .infinity) - } - .padding(24) - - .onAppear { - btnVM.setSize(for: attMoreBtnID, newWidth: 40, newHeight: 24) - btnVM.setText(for: attMoreBtnID, newText: "더보기", newFont: .nps(size: 12)) - btnVM.setTextColor(for: attMoreBtnID, newColor: .Text.disabled) + } moreAction: { // MARK: TO-DO - // 더보기 동작 로직 추가 + // 출석 쪽 더보기 동작 만들기 + print("123") } } } @@ -71,7 +46,6 @@ struct AttCellView: View { .foregroundStyle(Color(.Text.detail)) Text("출석").font(.nps(size: 12)) .foregroundStyle(Color(.Text.detail)) -// Spacer() } .padding(.top,4) HStack(alignment: .center, spacing: 2) { @@ -110,7 +84,3 @@ struct AttCellView: View { } } } - -#Preview { - AttendanceView() -} diff --git a/AcaMate/1. View/12. Main/122. DashBoard/CalendarBoxView.swift b/AcaMate/1. View/12. Main/122. DashBoard/CalendarBoxView.swift new file mode 100644 index 0000000..486c455 --- /dev/null +++ b/AcaMate/1. View/12. Main/122. DashBoard/CalendarBoxView.swift @@ -0,0 +1,68 @@ +// +// CalendarBoxView.swift +// AcaMate +// +// Created by TAnine on 2/10/25. +// + +import SwiftUI + +struct CalendarBoxView: View { + @State var summaryCalDataList: [SummaryCalendar] + var body: some View { + + DashBoardView(image: Image(.Icon.calendar), title: "최근 일정") { + VStack(spacing: 12) { + ForEach(Array(summaryCalDataList.enumerated()), id: \.offset) { index, data in + CalCellView(summaryCalData: data) + } + } + + } moreAction: { + printLog("최근일정의 더보기") + } + + } +} + +struct CalCellView: View { + var summaryCalData: SummaryCalendar + + var body: some View { + VStack(spacing: 8) { + HStack (spacing: 12) { + Image(.Icon.clock) + .resizable() + .frame(width: 24, height: 24, alignment: .center) + Text("\(summaryCalData.date)") + .font(.nps(size: 20)) + .foregroundStyle(Color(.Text.detail)) + Spacer(minLength: 1) + } + HStack(spacing: 0) { + Spacer(minLength: 1) + Text("\(summaryCalData.summary)") + .font(.nps(size: 20)) + .foregroundStyle(Color(.Text.black)) + .lineLimit(1) + .minimumScaleFactor(0.5) + .truncationMode(.tail) + } + + } + .padding(12) + .background { + RoundedRectangle(cornerRadius: 4) + .stroke(Color(.Second.normal), lineWidth: 2) + .fill(Color(.Second.light)) + } + .onTapGesture { + printLog("캘린더 내부 셀 클릭") + // MARK: TO-DO + // Summary의 날짜 위치로 이동하게 하는걸로 + // SummaryCalendar' id 를 이용하는걸로 + // 해당 날짜의 해당 이벤트가 아니라 그냥 해당 날짜로 이동하는게 좋을 것으로 보임 + } + } +} + diff --git a/AcaMate/1. View/12. Main/122. DashBoard/DashBoardView.swift b/AcaMate/1. View/12. Main/122. DashBoard/DashBoardView.swift new file mode 100644 index 0000000..ee8f549 --- /dev/null +++ b/AcaMate/1. View/12. Main/122. DashBoard/DashBoardView.swift @@ -0,0 +1,53 @@ +// +// DashBoardView.swift +// AcaMate +// +// Created by TAnine on 2/10/25. +// + +import SwiftUI + +struct DashBoardView: View { + @StateObject var btnVM = ButtonViewModel() + @State private var attMoreBtnID = UUID() + let image: Image + let title: String + @ViewBuilder let content: Content + var moreAction: VOID_TO_VOID? + + + var body: some View { + VStack(spacing: 0) { + HStack(spacing: 0){ + image + .resizable() + .frame(width: 24, height: 24, alignment: .center) + .padding([.trailing],4) + Text("\(title)") + .font(.nps(font: .bold, size: 20)) + .foregroundStyle(Color(.Text.detail)) + Spacer() + SimpleBtnView(vm: btnVM, id: attMoreBtnID) + } + .padding([.bottom],2) + + Rectangle() + .frame(maxWidth: .infinity, maxHeight: 2) + .foregroundStyle(Color(.Second.normal)) + .padding([.bottom],12) + + content + } + .padding(24) + .onAppear { + btnVM.setSize(for: attMoreBtnID, newWidth: 40, newHeight: 24) + btnVM.setText(for: attMoreBtnID, newText: "더보기", newFont: .nps(size: 12)) + btnVM.setTextColor(for: attMoreBtnID, newColor: .Text.disabled) + + if let action = moreAction { + btnVM.setAction(for: attMoreBtnID, newAction: action) + } + } + } +} + diff --git a/AcaMate/1. View/12. Main/122. DashBoard/ManagementBoxView.swift b/AcaMate/1. View/12. Main/122. DashBoard/ManagementBoxView.swift new file mode 100644 index 0000000..5232f20 --- /dev/null +++ b/AcaMate/1. View/12. Main/122. DashBoard/ManagementBoxView.swift @@ -0,0 +1,81 @@ +// +// ManagementBoxView.swift +// AcaMate +// +// Created by TAnine on 2/10/25. +// + +import SwiftUI + +struct ManagementBoxView: View { + @StateObject var btnVM = ButtonViewModel() + @State private var leftBtnID = UUID() + @State private var rightBtnID = UUID() + + var body: some View { + DashBoardView(image: Image(.Icon.edu), title: "학습 관리") { + + } moreAction: { + printLog("학습 관리의 더보기") + } + } +} + +struct MangCellView: View { + @StateObject var btnVM = ButtonViewModel() + let summaryMang: SummaryManagement + @State var ratioBtn = UUID() + @State var flagBtn = UUID() + var body: some View { + VStack(spacing: 8) { + HStack(spacing: 12) { + Image(.Icon.management) + .resizable() + .frame(width: 24, height: 24, alignment: .center) + Text("\(summaryMang.title)") + .font(.nps(size: 20)) + .foregroundStyle(Color(.Text.title)) + Spacer(minLength: 1) + } + HStack(spacing: 4) { + Spacer(minLength: 1) + Text("\(summaryMang.teacher)") + .font(.nps(size: 12)) + .foregroundStyle(Color(.Text.detail)) + Text("이름") + .font(.nps(size: 12)) + .foregroundStyle(Color(.Text.detail)) + } + + + } + // 상단 내용은 여까지 + HStack(spacing: 6) { + HStack(spacing: 10) { + CircleBtnView(vm: btnVM, id: ratioBtn) + VStack(spacing: 10) { + HStack(spacing: 4) { + Text("학습") + .font(.nps(size: 16)) + .foregroundStyle(Color(.Text.detail)) + Text("진도") + .font(.nps(font: .bold, size: 16)) + .foregroundStyle(Color(.Text.detail)) + Spacer(minLength: 1) + } + HStack(spacing: 4) { + Spacer(minLength: 1) + Text("\(summaryMang.ratio)") + .font(.nps(font: .bold, size: 24)) + .foregroundStyle(summaryMang.ratio > 70 ? Color(.Other.blue):Color(.Other.red)) + Text("%") + .font(.nps(font: .bold, size: 20)) + .foregroundStyle(Color(.Text.detail)) + + } + } + } + + } + } +} diff --git a/AcaMate/1. View/12. Main/MainView.swift b/AcaMate/1. View/12. Main/MainView.swift index e5587a9..d6150d3 100644 --- a/AcaMate/1. View/12. Main/MainView.swift +++ b/AcaMate/1. View/12. Main/MainView.swift @@ -4,7 +4,7 @@ // // Created by TAnine on 2/4/25. // - + import SwiftUI import Combine @@ -13,43 +13,69 @@ struct MainView: View { @State var cancellables: Set = [] @Binding var naviState : NaviState + @State private var scrollOffset: CGPoint = .zero + @State private var topViewState: Bool = false + var body: some View { - VStack(spacing:0) { - TopView(titleName: "Name") - // MARK: TO-DO - // 스크롤뷰 해서 탑뷰 가리는거 이제 만들어 보기 - VStack(spacing: 0) { - TopProfileView() - .padding(EdgeInsets(top: 0, leading: 0, bottom: 12, trailing: 0)) - AttendanceView() - .background { - RoundedRectangle(cornerRadius: 8) - .foregroundStyle(Color(.Other.cell)) + VStack(spacing: 0) { + ZStack { + OffsetObservableScrollView(scrollOffset: $scrollOffset) { proxy in + VStack(spacing: 0) { + TopProfileView() + .padding(EdgeInsets(top: 0, leading: 0, bottom: 12, trailing: 0)) + AttendanceBoxView() + .background { + RoundedRectangle(cornerRadius: 8) + .foregroundStyle(Color(.Other.cell)) + } + .padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24)) + AttendanceBoxView() + .background { + RoundedRectangle(cornerRadius: 8) + .foregroundStyle(Color(.Other.cell)) + } + .padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24)) + AttendanceBoxView() + .background { + RoundedRectangle(cornerRadius: 8) + .foregroundStyle(Color(.Other.cell)) + } + .padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24)) + CalendarBoxView(summaryCalDataList: [ + SummaryCalendar(id: "123", date: "2025-02-28", summary: "요약내용입니다."), + SummaryCalendar(id: "123", date: "2025-02-28", summary: "요약내용입니다.")]) + + .background { + RoundedRectangle(cornerRadius: 8) + .foregroundStyle(Color(.Other.cell)) + } + .padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24)) } - .padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24)) - AttendanceView() - .background { - RoundedRectangle(cornerRadius: 8) - .foregroundStyle(Color(.Other.cell)) + } + + if topViewState { + VStack(spacing: 0) { + TopView(titleName: "Name") + .transition(.move(edge: .top)) + .animation(.easeInOut, value: scrollOffset) + Spacer(minLength: 1) } - .padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24)) - AttendanceView() - .background { - RoundedRectangle(cornerRadius: 8) - .foregroundStyle(Color(.Other.cell)) - } - .padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24)) - AttendanceView() - .background { - RoundedRectangle(cornerRadius: 8) - .foregroundStyle(Color(.Other.cell)) - } - .padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24)) + + + + } } - BottomView() .frame(maxWidth: .infinity) } .frame(maxWidth: .infinity, maxHeight: .infinity) + .onChange(of: scrollOffset.y) { oldValue, newValue in + if newValue > 200 && topViewState == false { + topViewState = true + } else if newValue < 20 && topViewState == true{ + topViewState = false + } + } + } } diff --git a/AcaMate/2. Model/Calendar Data.swift b/AcaMate/2. Model/Calendar Data.swift new file mode 100644 index 0000000..f5e8ac8 --- /dev/null +++ b/AcaMate/2. Model/Calendar Data.swift @@ -0,0 +1,14 @@ +// +// SimpleCalendar.swift +// AcaMate +// +// Created by TAnine on 2/10/25. +// + +import Foundation + +struct SummaryCalendar { + var id: String + var date: String + var summary: String +} diff --git a/AcaMate/2. Model/Management Data.swift b/AcaMate/2. Model/Management Data.swift new file mode 100644 index 0000000..8214453 --- /dev/null +++ b/AcaMate/2. Model/Management Data.swift @@ -0,0 +1,16 @@ +// +// ManagementData.swift +// AcaMate +// +// Created by TAnine on 2/10/25. +// + +import Foundation + +struct SummaryManagement { + var id: String + var title: String + var teacher: String + var ratio: Int + var homework: Int +} diff --git a/AcaMate/5. Modifier/View.swift b/AcaMate/5. Modifier/View.swift index 61fdf47..f7e6df5 100644 --- a/AcaMate/5. Modifier/View.swift +++ b/AcaMate/5. Modifier/View.swift @@ -72,6 +72,42 @@ struct LoadingModifier: ViewModifier { } } +struct PressEffect: ViewModifier { + @State private var isPressed = false + var scale: CGFloat + var opacity: CGFloat + var duration: Double + + func body(content: Content) -> some View { + content + .scaleEffect(isPressed ? scale : 1.0) + .opacity(isPressed ? opacity : 1.0) + .animation(.easeOut(duration: duration), value: isPressed) + .simultaneousGesture( + LongPressGesture(minimumDuration: 0.01) + .onChanged { _ in isPressed = true } + .onEnded { _ in isPressed = false } + ) + } +} +struct PressBackgroundEffect: ViewModifier { + @State private var isPressed = false + var backgroundColor: Color + var duration: Double + + func body(content: Content) -> some View { + content + .background(isPressed ? backgroundColor : Color.clear) + .animation(.easeOut(duration: duration), value: isPressed) + .simultaneousGesture( + LongPressGesture(minimumDuration: 0.01) + .onChanged { _ in isPressed = true } + .onEnded { _ in isPressed = false } + ) + } +} + + extension View { /// View에 전체적으로 색 입히기 func fullDrawView(_ backColor: Color) -> some View { @@ -104,16 +140,14 @@ extension View { .mask(shape.fill(LinearGradient(gradient: Gradient(colors: [.black, .clear]), startPoint: .topLeading, endPoint: .bottomTrailing))) } } - - @ViewBuilder - func switchButtonStyle(_ animate: Bool) -> some View { - if animate { - self.buttonStyle(DefaultButtonStyle()) - } else { - self.buttonStyle(PlainButtonStyle()) -// .allowsHitTesting(false) - } + + func pressAnimation(scale: CGFloat = 0.95, opacity: CGFloat = 0.85, duration: Double = 0.1) -> some View { + self.modifier(PressEffect(scale: scale, opacity: opacity, duration: duration)) + + } +} +extension View { + func pressColorAnimation(backgroundColor: Color = Color.black.opacity(0.1), duration: Double = 0.1) -> some View { + self.modifier(PressBackgroundEffect(backgroundColor: backgroundColor, duration: duration)) } } - -//extension BUtton diff --git a/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Clock.imageset/Clock.png b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Clock.imageset/Clock.png new file mode 100644 index 0000000..25f6ab7 Binary files /dev/null and b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Clock.imageset/Clock.png differ diff --git a/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Clock.imageset/Contents.json b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Clock.imageset/Contents.json new file mode 100644 index 0000000..1f8fcd3 --- /dev/null +++ b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Clock.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "Clock.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Edu.imageset/Contents.json b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Edu.imageset/Contents.json new file mode 100644 index 0000000..a20ada2 --- /dev/null +++ b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Edu.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "Edu.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Edu.imageset/Edu.png b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Edu.imageset/Edu.png new file mode 100644 index 0000000..baf5afe Binary files /dev/null and b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Edu.imageset/Edu.png differ diff --git a/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Left.imageset/Contents.json b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Left.imageset/Contents.json new file mode 100644 index 0000000..efc51c2 --- /dev/null +++ b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Left.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "Left.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Left.imageset/Left.png b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Left.imageset/Left.png new file mode 100644 index 0000000..7c9dd98 Binary files /dev/null and b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Left.imageset/Left.png differ diff --git a/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Right.imageset/Contents.json b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Right.imageset/Contents.json new file mode 100644 index 0000000..99ddaa8 --- /dev/null +++ b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Right.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "Right.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Right.imageset/Right.png b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Right.imageset/Right.png new file mode 100644 index 0000000..1791c7b Binary files /dev/null and b/AcaMate/6. Resources/Assets.xcassets/Image Folder/Icon/Right.imageset/Right.png differ diff --git a/AcaMate/6. Resources/Images/Icon/Clock.png b/AcaMate/6. Resources/Images/Icon/Clock.png new file mode 100644 index 0000000..25f6ab7 Binary files /dev/null and b/AcaMate/6. Resources/Images/Icon/Clock.png differ diff --git a/AcaMate/6. Resources/Images/Icon/Edu.png b/AcaMate/6. Resources/Images/Icon/Edu.png new file mode 100644 index 0000000..baf5afe Binary files /dev/null and b/AcaMate/6. Resources/Images/Icon/Edu.png differ diff --git a/AcaMate/6. Resources/Images/Icon/Left.png b/AcaMate/6. Resources/Images/Icon/Left.png new file mode 100644 index 0000000..7c9dd98 Binary files /dev/null and b/AcaMate/6. Resources/Images/Icon/Left.png differ diff --git a/AcaMate/6. Resources/Images/Icon/Right.png b/AcaMate/6. Resources/Images/Icon/Right.png new file mode 100644 index 0000000..1791c7b Binary files /dev/null and b/AcaMate/6. Resources/Images/Icon/Right.png differ