diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270.xcodeproj/project.pbxproj" "b/week6/KREAM \353\263\265\354\202\254\353\263\270.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..e28a497 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270.xcodeproj/project.pbxproj" @@ -0,0 +1,595 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 1EB2ABA82CBE850400782620 /* Then in Frameworks */ = {isa = PBXBuildFile; productRef = 1EB2ABA72CBE850400782620 /* Then */; }; + 1ECD20322CB995D3007DFF8D /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = 1ECD20312CB995D3007DFF8D /* SnapKit */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 1ECD1FE72CB9774B007DFF8D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1ECD1FC82CB97749007DFF8D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1ECD1FCF2CB97749007DFF8D; + remoteInfo = KREAM; + }; + 1ECD1FF12CB9774B007DFF8D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1ECD1FC82CB97749007DFF8D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1ECD1FCF2CB97749007DFF8D; + remoteInfo = KREAM; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 1ECD1FD02CB97749007DFF8D /* KREAM.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KREAM.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 1ECD1FE62CB9774B007DFF8D /* KREAMTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KREAMTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 1ECD1FF02CB9774B007DFF8D /* KREAMUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KREAMUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 1ECD202F2CB97C76007DFF8D /* Exceptions for "KREAM" folder in "KREAM" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = 1ECD1FCF2CB97749007DFF8D /* KREAM */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 1ECD1FD22CB97749007DFF8D /* KREAM */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 1ECD202F2CB97C76007DFF8D /* Exceptions for "KREAM" folder in "KREAM" target */, + ); + path = KREAM; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1ECD1FCD2CB97749007DFF8D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1ECD20322CB995D3007DFF8D /* SnapKit in Frameworks */, + 1EB2ABA82CBE850400782620 /* Then in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ECD1FE32CB9774B007DFF8D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ECD1FED2CB9774B007DFF8D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1ECD1FC72CB97749007DFF8D = { + isa = PBXGroup; + children = ( + 1ECD1FD22CB97749007DFF8D /* KREAM */, + 1ECD1FD12CB97749007DFF8D /* Products */, + ); + sourceTree = ""; + }; + 1ECD1FD12CB97749007DFF8D /* Products */ = { + isa = PBXGroup; + children = ( + 1ECD1FD02CB97749007DFF8D /* KREAM.app */, + 1ECD1FE62CB9774B007DFF8D /* KREAMTests.xctest */, + 1ECD1FF02CB9774B007DFF8D /* KREAMUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1ECD1FCF2CB97749007DFF8D /* KREAM */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1ECD1FF92CB9774B007DFF8D /* Build configuration list for PBXNativeTarget "KREAM" */; + buildPhases = ( + 1ECD1FCC2CB97749007DFF8D /* Sources */, + 1ECD1FCD2CB97749007DFF8D /* Frameworks */, + 1ECD1FCE2CB97749007DFF8D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 1ECD1FD22CB97749007DFF8D /* KREAM */, + ); + name = KREAM; + packageProductDependencies = ( + 1ECD20312CB995D3007DFF8D /* SnapKit */, + 1EB2ABA72CBE850400782620 /* Then */, + ); + productName = KREAM; + productReference = 1ECD1FD02CB97749007DFF8D /* KREAM.app */; + productType = "com.apple.product-type.application"; + }; + 1ECD1FE52CB9774B007DFF8D /* KREAMTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1ECD1FFE2CB9774B007DFF8D /* Build configuration list for PBXNativeTarget "KREAMTests" */; + buildPhases = ( + 1ECD1FE22CB9774B007DFF8D /* Sources */, + 1ECD1FE32CB9774B007DFF8D /* Frameworks */, + 1ECD1FE42CB9774B007DFF8D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 1ECD1FE82CB9774B007DFF8D /* PBXTargetDependency */, + ); + name = KREAMTests; + packageProductDependencies = ( + ); + productName = KREAMTests; + productReference = 1ECD1FE62CB9774B007DFF8D /* KREAMTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 1ECD1FEF2CB9774B007DFF8D /* KREAMUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1ECD20012CB9774B007DFF8D /* Build configuration list for PBXNativeTarget "KREAMUITests" */; + buildPhases = ( + 1ECD1FEC2CB9774B007DFF8D /* Sources */, + 1ECD1FED2CB9774B007DFF8D /* Frameworks */, + 1ECD1FEE2CB9774B007DFF8D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 1ECD1FF22CB9774B007DFF8D /* PBXTargetDependency */, + ); + name = KREAMUITests; + packageProductDependencies = ( + ); + productName = KREAMUITests; + productReference = 1ECD1FF02CB9774B007DFF8D /* KREAMUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 1ECD1FC82CB97749007DFF8D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1600; + LastUpgradeCheck = 1600; + TargetAttributes = { + 1ECD1FCF2CB97749007DFF8D = { + CreatedOnToolsVersion = 16.0; + }; + 1ECD1FE52CB9774B007DFF8D = { + CreatedOnToolsVersion = 16.0; + TestTargetID = 1ECD1FCF2CB97749007DFF8D; + }; + 1ECD1FEF2CB9774B007DFF8D = { + CreatedOnToolsVersion = 16.0; + TestTargetID = 1ECD1FCF2CB97749007DFF8D; + }; + }; + }; + buildConfigurationList = 1ECD1FCB2CB97749007DFF8D /* Build configuration list for PBXProject "KREAM" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 1ECD1FC72CB97749007DFF8D; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 1ECD20302CB995D3007DFF8D /* XCRemoteSwiftPackageReference "SnapKit" */, + 1EB2ABA62CBE850400782620 /* XCRemoteSwiftPackageReference "Then" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 1ECD1FD12CB97749007DFF8D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 1ECD1FCF2CB97749007DFF8D /* KREAM */, + 1ECD1FE52CB9774B007DFF8D /* KREAMTests */, + 1ECD1FEF2CB9774B007DFF8D /* KREAMUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1ECD1FCE2CB97749007DFF8D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ECD1FE42CB9774B007DFF8D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ECD1FEE2CB9774B007DFF8D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1ECD1FCC2CB97749007DFF8D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ECD1FE22CB9774B007DFF8D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ECD1FEC2CB9774B007DFF8D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 1ECD1FE82CB9774B007DFF8D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1ECD1FCF2CB97749007DFF8D /* KREAM */; + targetProxy = 1ECD1FE72CB9774B007DFF8D /* PBXContainerItemProxy */; + }; + 1ECD1FF22CB9774B007DFF8D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1ECD1FCF2CB97749007DFF8D /* KREAM */; + targetProxy = 1ECD1FF12CB9774B007DFF8D /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 1ECD1FFA2CB9774B007DFF8D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = KREAM/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = umciosstudy.KREAM; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 1ECD1FFB2CB9774B007DFF8D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = KREAM/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = umciosstudy.KREAM; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 1ECD1FFC2CB9774B007DFF8D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = /Users/taebin2/Desktop/KREAM/KREAM/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 1ECD1FFD2CB9774B007DFF8D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = /Users/taebin2/Desktop/KREAM/KREAM/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 1ECD1FFF2CB9774B007DFF8D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = umciosstudy.KREAMTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KREAM.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/KREAM"; + }; + name = Debug; + }; + 1ECD20002CB9774B007DFF8D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = umciosstudy.KREAMTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KREAM.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/KREAM"; + }; + name = Release; + }; + 1ECD20022CB9774B007DFF8D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = umciosstudy.KREAMUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = KREAM; + }; + name = Debug; + }; + 1ECD20032CB9774B007DFF8D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = umciosstudy.KREAMUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = KREAM; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1ECD1FCB2CB97749007DFF8D /* Build configuration list for PBXProject "KREAM" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1ECD1FFC2CB9774B007DFF8D /* Debug */, + 1ECD1FFD2CB9774B007DFF8D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1ECD1FF92CB9774B007DFF8D /* Build configuration list for PBXNativeTarget "KREAM" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1ECD1FFA2CB9774B007DFF8D /* Debug */, + 1ECD1FFB2CB9774B007DFF8D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1ECD1FFE2CB9774B007DFF8D /* Build configuration list for PBXNativeTarget "KREAMTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1ECD1FFF2CB9774B007DFF8D /* Debug */, + 1ECD20002CB9774B007DFF8D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1ECD20012CB9774B007DFF8D /* Build configuration list for PBXNativeTarget "KREAMUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1ECD20022CB9774B007DFF8D /* Debug */, + 1ECD20032CB9774B007DFF8D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 1EB2ABA62CBE850400782620 /* XCRemoteSwiftPackageReference "Then" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/devxoul/Then"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 3.0.0; + }; + }; + 1ECD20302CB995D3007DFF8D /* XCRemoteSwiftPackageReference "SnapKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SnapKit/SnapKit"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.7.1; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 1EB2ABA72CBE850400782620 /* Then */ = { + isa = XCSwiftPackageProductDependency; + package = 1EB2ABA62CBE850400782620 /* XCRemoteSwiftPackageReference "Then" */; + productName = Then; + }; + 1ECD20312CB995D3007DFF8D /* SnapKit */ = { + isa = XCSwiftPackageProductDependency; + package = 1ECD20302CB995D3007DFF8D /* XCRemoteSwiftPackageReference "SnapKit" */; + productName = SnapKit; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 1ECD1FC82CB97749007DFF8D /* Project object */; +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270.xcodeproj/xcshareddata/xcschemes/KREAM.xcscheme" "b/week6/KREAM \353\263\265\354\202\254\353\263\270.xcodeproj/xcshareddata/xcschemes/KREAM.xcscheme" new file mode 100644 index 0000000..3fc2aec --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270.xcodeproj/xcshareddata/xcschemes/KREAM.xcscheme" @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/AppDelegate.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/AppDelegate.swift" new file mode 100644 index 0000000..cbb8d3c --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/AppDelegate.swift" @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// UMCKream +// +// Created by 한태빈 on 9/30/24. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/AccentColor.colorset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/AccentColor.colorset/Contents.json" new file mode 100644 index 0000000..eb87897 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/AccentColor.colorset/Contents.json" @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..2305880 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Contents.json" new file mode 100644 index 0000000..73c0059 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Contents.json" @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped1.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped1.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped1.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped1.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped1.imageset/Image.png" new file mode 100644 index 0000000..3fcfc1a Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped1.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped2.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped2.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped2.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped2.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped2.imageset/Image.png" new file mode 100644 index 0000000..55198f8 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped2.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped3.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped3.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped3.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped3.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped3.imageset/Image.png" new file mode 100644 index 0000000..a0c2f2c Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped3.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Kream.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Kream.imageset/Contents.json" new file mode 100644 index 0000000..b29f1b7 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Kream.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Kream.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Kream.imageset/Kream.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Kream.imageset/Kream.png" new file mode 100644 index 0000000..93bce3c Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Kream.imageset/Kream.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAW.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAW.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAW.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAW.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAW.imageset/Image.png" new file mode 100644 index 0000000..dbe8ac1 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAW.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAcne.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAcne.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAcne.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAcne.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAcne.imageset/Image.png" new file mode 100644 index 0000000..4e6f735 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAcne.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainChart.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainChart.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainChart.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainChart.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainChart.imageset/Image.png" new file mode 100644 index 0000000..bc8e505 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainChart.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainCheap.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainCheap.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainCheap.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainCheap.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainCheap.imageset/Image.png" new file mode 100644 index 0000000..dbe8ac1 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainCheap.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDecember.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDecember.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDecember.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDecember.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDecember.imageset/Image.png" new file mode 100644 index 0000000..aba421a Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDecember.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDraw.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDraw.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDraw.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDraw.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDraw.imageset/Image.png" new file mode 100644 index 0000000..c49488e Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDraw.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainMen.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainMen.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainMen.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainMen.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainMen.imageset/Image.png" new file mode 100644 index 0000000..6424d05 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainMen.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainUnique.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainUnique.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainUnique.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainUnique.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainUnique.imageset/Image.png" new file mode 100644 index 0000000..3934478 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainUnique.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainWomen.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainWomen.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainWomen.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainWomen.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainWomen.imageset/Image.png" new file mode 100644 index 0000000..68d8e60 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainWomen.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainYB.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainYB.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainYB.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainYB.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainYB.imageset/Image.png" new file mode 100644 index 0000000..16fc6c9 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainYB.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/ad.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/ad.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/ad.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/ad.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/ad.imageset/Image.png" new file mode 100644 index 0000000..7ebe91c Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/ad.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/alarm.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/alarm.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/alarm.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/alarm.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/alarm.imageset/Image.png" new file mode 100644 index 0000000..67b696f Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/alarm.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/camera.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/camera.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/camera.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/camera.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/camera.imageset/Image.png" new file mode 100644 index 0000000..d6ac03d Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/camera.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/home.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/home.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/home.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/home.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/home.imageset/Image.png" new file mode 100644 index 0000000..70f1873 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/home.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblack.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblack.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblack.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblack.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblack.imageset/Image.png" new file mode 100644 index 0000000..f9c905e Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblack.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblue.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblue.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblue.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblue.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblue.imageset/Image.png" new file mode 100644 index 0000000..451ae48 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblue.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimbrown.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimbrown.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimbrown.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimbrown.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimbrown.imageset/Image.png" new file mode 100644 index 0000000..7edf67f Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimbrown.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimburgundy.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimburgundy.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimburgundy.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimburgundy.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimburgundy.imageset/Image.png" new file mode 100644 index 0000000..fa0950a Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimburgundy.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimcherry.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimcherry.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimcherry.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimcherry.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimcherry.imageset/Image.png" new file mode 100644 index 0000000..ea28897 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimcherry.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimgreen.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimgreen.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimgreen.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimgreen.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimgreen.imageset/Image.png" new file mode 100644 index 0000000..fdf52aa Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimgreen.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimlast.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimlast.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimlast.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimlast.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimlast.imageset/Image.png" new file mode 100644 index 0000000..d6d1b25 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimlast.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimpurple.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimpurple.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimpurple.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimpurple.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimpurple.imageset/Image.png" new file mode 100644 index 0000000..a7d8db0 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimpurple.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/my.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/my.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/my.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/my.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/my.imageset/Image.png" new file mode 100644 index 0000000..68be4e5 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/my.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/profile.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/profile.imageset/Contents.json" new file mode 100644 index 0000000..962e49c --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/profile.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "profile.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/profile.imageset/profile.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/profile.imageset/profile.png" new file mode 100644 index 0000000..d1721da Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/profile.imageset/profile.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/saved.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/saved.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/saved.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/saved.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/saved.imageset/Image.png" new file mode 100644 index 0000000..c2e3937 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/saved.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/setting.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/setting.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/setting.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/setting.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/setting.imageset/Image.png" new file mode 100644 index 0000000..4821736 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/setting.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/shop.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/shop.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/shop.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/shop.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/shop.imageset/Image.png" new file mode 100644 index 0000000..c7e0cd5 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/shop.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/style.imageset/Contents.json" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/style.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/style.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/style.imageset/Image.png" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/style.imageset/Image.png" new file mode 100644 index 0000000..b341391 Binary files /dev/null and "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/style.imageset/Image.png" differ diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Collect/FWMustHavesCollectionViewCell.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Collect/FWMustHavesCollectionViewCell.swift" new file mode 100644 index 0000000..dcb8302 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Collect/FWMustHavesCollectionViewCell.swift" @@ -0,0 +1,12 @@ +// +// FWMustHavesCollectionViewCell.swift +// KREAM +// +// Created by 한태빈 on 10/30/24. +// + +import UIKit + +class FWMustHavesCollectionViewCell: UICollectionViewCell { + +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Collect/HomeCollecionViewCell.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Collect/HomeCollecionViewCell.swift" new file mode 100644 index 0000000..171d72b --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Collect/HomeCollecionViewCell.swift" @@ -0,0 +1,46 @@ +// Created by 한태빈 on 10/15/24. +// + +import UIKit + +class HomeCollectionViewCell: UICollectionViewCell { + static let identifier = "HomeCollectionViewCell" + + let imageView = UIImageView().then { + $0.contentMode = .scaleAspectFill + $0.clipsToBounds = true + } + + let titleLabel = UILabel().then { + $0.font = .systemFont(ofSize: 11.5, weight: .light) + $0.textColor = .black + $0.textAlignment = .center + $0.text = "크림 드로우" + } + override init(frame: CGRect) { + super.init(frame: frame) + + setupView() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupView(){ + addSubview(imageView) + addSubview(titleLabel) + + imageView.snp.makeConstraints { + $0.top.horizontalEdges.equalToSuperview() + $0.height.equalTo(61) + $0.width.equalTo(61) + + } + + titleLabel.snp.makeConstraints{ + $0.bottom.equalToSuperview() + $0.centerX.equalToSuperview() + } + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Collect/JustDroppedCollectionViewCell.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Collect/JustDroppedCollectionViewCell.swift" new file mode 100644 index 0000000..cf81ec5 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Collect/JustDroppedCollectionViewCell.swift" @@ -0,0 +1,118 @@ +import UIKit + +class JustDroppedCollectionViewCell: UICollectionViewCell { + static let identifier = "JustDroppedCollectionViewCell" + + // 모델 설정 + var model: JustDroppedModel? { + didSet { + updateBookmarkState() // 모델이 설정될 때 북마크 상태 업데이트 + } + } + + // 이미지 뷰 + let imageView = UIImageView().then { + $0.contentMode = .scaleAspectFill + $0.clipsToBounds = true + } + + // 거래량 라벨 + let titleLabel = UILabel().then { + $0.font = .systemFont(ofSize: 10, weight: .regular) + $0.textColor = UIColor(red: 64/255, green: 69/255, blue: 75/255, alpha: 1.0) + $0.textAlignment = .center + } + + // 북마크 버튼 + let saveButton = UIButton().then { + $0.tintColor = UIColor.black + } + + // 브랜드명 라벨 + let brandLabel = UILabel().then { + $0.font = .systemFont(ofSize: 12, weight: .semibold) + $0.textColor = .black + } + + // 상품명 라벨 + let productLabel = UILabel().then { + $0.font = .systemFont(ofSize: 12, weight: .light) + $0.textColor = .black + } + + // 가격 라벨 + let priceLabel = UILabel().then { + $0.font = .systemFont(ofSize: 13, weight: .semibold) + $0.textColor = .black + } + + let nowBuyingLabel = UILabel().then { + $0.font = .systemFont(ofSize: 10, weight: .light) + $0.textColor = UIColor(red: 162/255, green: 162/255, blue: 162/255, alpha: 1.0) + } + + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupView() { + // 서브뷰 추가 + [imageView, titleLabel, saveButton, brandLabel, productLabel, priceLabel, nowBuyingLabel].forEach { + contentView.addSubview($0) + } + + // 레이아웃 설정 + imageView.snp.makeConstraints { make in + make.top.horizontalEdges.equalToSuperview() + make.height.equalTo(142) + make.width.equalTo(142) + } + + titleLabel.snp.makeConstraints { make in + make.top.equalTo(imageView.snp.top).offset(8) + make.trailing.equalTo(imageView.snp.trailing).offset(-8) + } + + saveButton.snp.makeConstraints { make in + make.top.equalTo(imageView.snp.top).offset(112) + make.trailing.equalTo(imageView.snp.trailing).offset(-10) + make.height.equalTo(20) + make.width.equalTo(22) + } + + brandLabel.snp.makeConstraints { make in + make.top.equalTo(imageView.snp.bottom).offset(8) + make.leading.equalTo(imageView.snp.leading).offset(4) + } + + productLabel.snp.makeConstraints { make in + make.top.equalTo(brandLabel.snp.bottom).offset(3) + make.leading.equalTo(imageView.snp.leading).offset(4) + } + + priceLabel.snp.makeConstraints { make in + make.top.equalTo(brandLabel.snp.bottom).offset(43) + make.leading.equalTo(imageView.snp.leading).offset(4) + } + + nowBuyingLabel.snp.makeConstraints { make in + make.top.equalTo(priceLabel.snp.bottom).offset(2) + make.leading.equalTo(imageView.snp.leading).offset(4) + } + } + + // 북마크 상태 업데이트 메서드 + private func updateBookmarkState() { + guard let model = model else { return } + + // isBookmarked가 true이면 채워진 아이콘, false이면 빈 아이콘 설정 + let iconName = model.isBookmarked ? "bookmark.fill" : "bookmark" + saveButton.setImage(UIImage(systemName: iconName), for: .normal) + } + +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Collect/MatinKimCollectionViewCell.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Collect/MatinKimCollectionViewCell.swift" new file mode 100644 index 0000000..d37dc1a --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Collect/MatinKimCollectionViewCell.swift" @@ -0,0 +1,28 @@ +// +// MatinKimCollectionViewCell.swift +// KREAM +// +// Created by 한태빈 on 11/9/24. +// + +import UIKit + +class MatinKimCollectionViewCell: UICollectionViewCell { + + static let identifier = "MatinKimCollectionViewCell" + let imageView = UIImageView().then { + $0.contentMode = .scaleAspectFill + $0.clipsToBounds = true + } + + func setupView(){ + addSubview(imageView) + + imageView.snp.makeConstraints { + $0.top.horizontalEdges.equalToSuperview() + $0.height.equalTo(53) + $0.width.equalTo(53) + + } + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Models/HomeModel.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Models/HomeModel.swift" new file mode 100644 index 0000000..87780da --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Models/HomeModel.swift" @@ -0,0 +1,27 @@ + +// Created by 한태빈 on 10/15/24. +// + +import UIKit + +struct HomeModel{ + let image: UIImage + let name: String +} + +extension HomeModel{ + static func Makedummy() ->[HomeModel]{ + return[ + HomeModel(image: .mainDraw, name: "크림 드로우"), + HomeModel(image: .mainChart, name: "실시간 차트"), + HomeModel(image: .mainMen, name: "남성 추천"), + HomeModel(image: .mainWomen, name: "여성 추천"), + HomeModel(image: .mainUnique, name: "색다른 추천"), + HomeModel(image: .mainCheap, name: "정가 아래"), + HomeModel(image: .mainAW, name: "윤세 24AW"), + HomeModel(image: .mainYB, name: "올해의 베스트"), + HomeModel(image: .mainDecember, name: "10월의 베네핏"), + HomeModel(image: .mainAcne, name: "아크네 선물") + ] + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Models/JustDroppedModel.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Models/JustDroppedModel.swift" new file mode 100644 index 0000000..82afede --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Models/JustDroppedModel.swift" @@ -0,0 +1,48 @@ +import UIKit + +struct JustDroppedModel { + let image: UIImage //상품 이미지 + let transactionCount: String //(예: "거래 12.8만") + let brandName: String //(예: "MLB") + let productName: String //(예: "청키라이너 뉴욕양키스") + let price: String //(예: "139,000원") + let buyNowLabel: String //(예: "즉시 구매가") + var isBookmarked: Bool // 저장 여부 (북마크 상태) +} + +extension JustDroppedModel { + // 더미 데이터 생성 메서드 + static func MakeDummy2() -> [JustDroppedModel] { + return [ + JustDroppedModel( + image:.justDropped1, + transactionCount: "거래 12.8만", + brandName: "MLB", + productName: "청키라이너 뉴욕양키스", + price: "139,000원", + buyNowLabel: "즉시 구매가", + isBookmarked: false + ), + + JustDroppedModel( + image:.justDropped2, + transactionCount: "거래 15.6만", + brandName: "Jordan", + productName: "Jordan 1 Retro High OG\n Yellow Ochre", + price: "228,000원", + buyNowLabel: "즉시 구매가", + isBookmarked: true + ), + + JustDroppedModel( + image:.matinkimblack, + transactionCount: "거래 12.8만", + brandName: "Matin Kim", + productName: "Matin Kim Logo Coating Jumper", + price: "228,000원", + buyNowLabel: "즉시 구매가", + isBookmarked: false + ) + ] + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Models/LoginModel.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Models/LoginModel.swift" new file mode 100644 index 0000000..3c73306 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Models/LoginModel.swift" @@ -0,0 +1,29 @@ +import Foundation + +struct LoginModel { + var id: String + var pwd: String + + init(id: String = "", pwd: String = "") { + self.id = id + self.pwd = pwd + } + + // UserDefaults로 아이디 비번 저장 + public func saveToUserDefaults() { + UserDefaults.standard.set(id, forKey: "userId") + UserDefaults.standard.set(pwd, forKey: "userPwd") + } + + // 회원 아이디, 비밀번호 불러오기 + //아이디, 비밀번호 반환 + static func loadFromUserDefaults() -> LoginModel? { + guard + let id = UserDefaults.standard.string(forKey: "userId"), + let pwd = UserDefaults.standard.string(forKey: "userPwd") + else { + return nil + } + return LoginModel(id: id, pwd: pwd) + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/SceneDelegate.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/SceneDelegate.swift" new file mode 100644 index 0000000..662a90c --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/SceneDelegate.swift" @@ -0,0 +1,53 @@ +// +// SceneDelegate.swift +// UMCKream +// +// Created by 한태빈 on 9/30/24. +// + + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + guard let windowScene = (scene as? UIWindowScene) else { return } + + window = UIWindow(windowScene: windowScene) + let loginVC = LoginViewController() + window?.rootViewController = loginVC + window?.makeKeyAndVisible() + } +} + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + + diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/HomeViewController.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/HomeViewController.swift" new file mode 100644 index 0000000..68e437d --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/HomeViewController.swift" @@ -0,0 +1,101 @@ +import UIKit + +class HomeViewController: UIViewController, UICollectionViewDelegate { + private let rootView = Homeview() + + override func viewDidLoad() { + super.viewDidLoad() + + view = rootView + setupAction() + setupDelegate() + } + + private func setupAction() { + rootView.segmentedControl.addTarget( + self, + action: #selector(segmentedControlValueChanged(segment:)), + for: .valueChanged + ) + } + + private func setupDelegate() { + rootView.HomeCollectionView.dataSource = self + rootView.HomeCollectionView.delegate = self + rootView.JustDroppedCollectionView.dataSource = self + rootView.JustDroppedCollectionView.delegate = self + } + + @objc + private func segmentedControlValueChanged(segment: UISegmentedControl) { + if segment.selectedSegmentIndex == 0 { + rootView.HomeCollectionView.isHidden = false + rootView.JustDroppedCollectionView.isHidden = false + rootView.emptyLabel.isHidden = true + } else { + rootView.HomeCollectionView.isHidden = true + rootView.JustDroppedCollectionView.isHidden = true + rootView.emptyLabel.isHidden = false + } + } +} + +extension HomeViewController: UICollectionViewDataSource { + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + if collectionView == rootView.HomeCollectionView { + return HomeModel.Makedummy().count + } else if collectionView == rootView.JustDroppedCollectionView { + return JustDroppedModel.MakeDummy2().count + } + return 0 + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + if collectionView == rootView.HomeCollectionView { + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: HomeCollectionViewCell.identifier, + for: indexPath + ) as? HomeCollectionViewCell else { + return UICollectionViewCell() + } + let list = HomeModel.Makedummy() + cell.imageView.image = list[indexPath.row].image + cell.titleLabel.text = list[indexPath.row].name + return cell + + } else if collectionView == rootView.JustDroppedCollectionView { + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: JustDroppedCollectionViewCell.identifier, + for: indexPath + ) as? JustDroppedCollectionViewCell else { + return UICollectionViewCell() + } + let list = JustDroppedModel.MakeDummy2() + cell.imageView.image = list[indexPath.row].image + cell.titleLabel.text = list[indexPath.row].transactionCount + cell.brandLabel.text = list[indexPath.row].brandName + cell.productLabel.text = list[indexPath.row].productName + cell.priceLabel.text = list[indexPath.row].price + cell.nowBuyingLabel.text = list[indexPath.row].buyNowLabel + cell.saveButton.setImage( + UIImage(systemName: list[indexPath.row].isBookmarked ? "bookmark.fill" : "bookmark"), + for: .normal + ) + return cell + } + return UICollectionViewCell() + } +} + + +extension HomeViewController { + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + // JustDroppedCollectionView에서 셀이 클릭되었는지 확인 + if collectionView == rootView.JustDroppedCollectionView { + // ProductViewController로 이동 + let productViewController = ProductViewController() + + navigationController?.pushViewController(productViewController, animated: true) + } + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/LoginViewController.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/LoginViewController.swift" new file mode 100644 index 0000000..bb90629 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/LoginViewController.swift" @@ -0,0 +1,42 @@ +import UIKit + +class LoginViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + self.view = loginView + } + + private lazy var loginView: LoginView = { + let view = LoginView() + // 버튼 액션 추가 + view.loginButton.addTarget(self, action: #selector(loginButtonTapped), for: .touchUpInside) + view.kakaoLoginButton.addTarget(self, action: #selector(kakaoLoginButtonTapped), for: .touchUpInside) + view.appleLoginButton.addTarget(self, action: #selector(appleLoginButtonTapped), for: .touchUpInside) + return view + }() + + // 로그인 버튼 눌렀을 때 탭바로 이동 + @objc func loginButtonTapped() { + print("로그인 버튼 눌림") + let tabBarVC = TabarViewController() + tabBarVC.modalPresentationStyle = .fullScreen + present(tabBarVC, animated: true) + } + + // 카카오 로그인 버튼 액션 + @objc func kakaoLoginButtonTapped() { + print("카카오로 로그인 버튼 눌림") + let tabBarVC = TabarViewController() + tabBarVC.modalPresentationStyle = .fullScreen + present(tabBarVC, animated: true) + } + + // 애플 로그인 버튼 액션 + @objc func appleLoginButtonTapped() { + print("애플로 로그인 버튼 눌림") + let tabBarVC = TabarViewController() + tabBarVC.modalPresentationStyle = .fullScreen + present(tabBarVC, animated: true) + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/MyPageManageViewController.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/MyPageManageViewController.swift" new file mode 100644 index 0000000..fca6553 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/MyPageManageViewController.swift" @@ -0,0 +1,43 @@ +import UIKit + +/// 프로필 관리 페이지 뷰 컨트롤러 +class MyPageManageViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + self.view = manageProfilePageView + setNavigation() + } + + // lazy로 관리되는 커스텀 뷰, 버튼 액션을 연결함 + private lazy var manageProfilePageView: ManageProfilePageView = { + let view = ManageProfilePageView() + view.changeButton.addTarget(self, action: #selector(changeButtonTapped), for: .touchUpInside) + view.changeButton2.addTarget(self, action: #selector(changeButton2Tapped), for: .touchUpInside) + return view + }() + + // 네비게이션 설정 + private func setNavigation() { + self.navigationItem.title = "프로필 관리" + + let backBtn = UIBarButtonItem(image: UIImage(systemName: "arrow.left")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(backButtonTapped)) + navigationItem.leftBarButtonItem = backBtn + } + + /// 네비게이션 왼쪽 상단 버튼 액션 + @objc func backButtonTapped() { + navigationController?.popViewController(animated: true) + } + + @objc func changeButtonTapped() { + // ChangeButton1 눌렸을 때의 동작 + print("ChangeButton 눌림") + } + + @objc func changeButton2Tapped() { + // ChangeButton2 눌렸을 때의 동작 + print("ChangeButton2 눌림") + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/MyPageViewController.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/MyPageViewController.swift" new file mode 100644 index 0000000..7369195 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/MyPageViewController.swift" @@ -0,0 +1,24 @@ +import UIKit + +/// 마이 페이지 뷰 컨트롤러 +class MyPageViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + self.view = myPageView + } + + /// 커스텀한 마이페이지 뷰 + private lazy var myPageView: MyPageView = { + let view = MyPageView() + view.manageButton.addTarget(self, action: #selector(ManageButtonTapped), for: .touchUpInside) + return view + }() + + /// 프로필 관리 버튼을 통해 프로필 수정 페이지 이동 + @objc func ManageButtonTapped() { + let changeVC = MyPageManageViewController() + navigationController?.pushViewController(changeVC, animated: true) + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/ProductViewController.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/ProductViewController.swift" new file mode 100644 index 0000000..e48da9c --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/ProductViewController.swift" @@ -0,0 +1,47 @@ +// +// ProductViewController.swift +// KREAM +// +// Created by 한태빈 on 11/9/24. +// + +import UIKit + +class ProductViewController: UIViewController, UICollectionViewDataSource { + private let images: [UIImage] = [ + UIImage(named: "matinkimblue")!, + UIImage(named: "matinkimpurple")!, + UIImage(named: "matinkimgreen")!, + UIImage(named: "matinkimburgundy")!, + UIImage(named: "matinkimcherry")!, + UIImage(named: "matinkimbrown")!, + UIImage(named: "matinkimlast")! + ] + + private let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout()) + + //ProductViewController랑 ProductView 연결 + private let rootView = ProductView() + + override func loadView() { + self.view = rootView + collectionView.dataSource = self + collectionView.register(MatinKimCollectionViewCell.self, forCellWithReuseIdentifier: MatinKimCollectionViewCell.identifier) + view.addSubview(collectionView) + + collectionView.frame = view.bounds + } + + + // UICollectionViewDataSource 메서드 + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return images.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MatinKimCollectionViewCell.identifier, for: indexPath) as! MatinKimCollectionViewCell + cell.imageView.image = images[indexPath.item] + return cell + } +} + diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/SavedViewController.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/SavedViewController.swift" new file mode 100644 index 0000000..665b254 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/SavedViewController.swift" @@ -0,0 +1,17 @@ +// +// SavedViewController.swift +// UMCKream +// +// Created by 한태빈 on 10/6/24. +// + +import UIKit + +class SavedViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/ShophViewController.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/ShophViewController.swift" new file mode 100644 index 0000000..8a9d7c7 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/ShophViewController.swift" @@ -0,0 +1,16 @@ +// +// ShophViewController.swift +// UMCKream +// +// Created by 한태빈 on 10/6/24. +// + +import UIKit + +class ShopViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/StyleViewController.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/StyleViewController.swift" new file mode 100644 index 0000000..12f5c01 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/StyleViewController.swift" @@ -0,0 +1,17 @@ +// +// StyleViewController.swift +// UMCKream +// +// Created by 한태빈 on 10/6/24. +// + +import UIKit + +class StyleViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/TabarViewController.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/TabarViewController.swift" new file mode 100644 index 0000000..1876876 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/TabarViewController.swift" @@ -0,0 +1,53 @@ +import UIKit + +// UIImage 확장: 이미지를 크기에 맞게 리사이즈하는 메서드 추가 +extension UIImage { + func resize(to size: CGSize) -> UIImage? { + UIGraphicsBeginImageContextWithOptions(size, false, 0.0) + self.draw(in: CGRect(origin: .zero, size: size)) + let resizedImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + return resizedImage + } +} + +class TabarViewController: UITabBarController { + + override func viewDidLoad() { + super.viewDidLoad() + + let HomeVC = UINavigationController(rootViewController: HomeViewController()) + let homeImage = UIImage(named: "home")?.resize(to: CGSize(width: 26, height: 26)) + HomeVC.tabBarItem = UITabBarItem(title: "HOME", image: homeImage, tag: 0) + + let StyleVC = UINavigationController(rootViewController: StyleViewController()) + let styleImage = UIImage(named: "style")?.resize(to: CGSize(width: 27, height: 26)) + StyleVC.tabBarItem = UITabBarItem(title: "STYLE", image: styleImage, tag: 1) + + let ShopVC = UINavigationController(rootViewController: ShopViewController()) + let shopImage = UIImage(named: "shop")?.resize(to: CGSize(width: 31, height: 31)) + ShopVC.tabBarItem = UITabBarItem(title: "SHOP", image: shopImage, tag: 2) + + let SavedVC = UINavigationController(rootViewController: SavedViewController()) + let savedImage = UIImage(named: "saved")?.resize(to: CGSize(width: 28, height: 26)) + SavedVC.tabBarItem = UITabBarItem(title: "SAVED", image: savedImage, tag: 3) + + let MyVC = UINavigationController(rootViewController: MyPageViewController()) + let myImage = UIImage(named: "my")?.resize(to: CGSize(width: 29, height: 26)) + MyVC.tabBarItem = UITabBarItem(title: "MY", image: myImage, tag: 4) + + self.viewControllers = [HomeVC, StyleVC, ShopVC, SavedVC, MyVC] + appearance() + } + + private func appearance() { + let tabarAppearance = UITabBarAppearance() + tabarAppearance.stackedLayoutAppearance.selected.iconColor = UIColor.black + tabarAppearance.stackedLayoutAppearance.selected.titleTextAttributes = [.foregroundColor: UIColor.black] + tabarAppearance.stackedLayoutAppearance.selected.badgeBackgroundColor = UIColor.black + tabarAppearance.stackedLayoutAppearance.normal.badgeBackgroundColor = UIColor.black + + self.tabBar.standardAppearance = tabarAppearance + self.tabBar.backgroundColor = .white + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/HomeView.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/HomeView.swift" new file mode 100644 index 0000000..6f13f5d --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/HomeView.swift" @@ -0,0 +1,233 @@ +import UIKit +import Then +import SnapKit + +class Homeview: UIView { + + // ScrollView + private lazy var scrollView: UIScrollView = { + let scrollView = UIScrollView() + scrollView.showsVerticalScrollIndicator = true + scrollView.showsHorizontalScrollIndicator = false + return scrollView + }() + + //contentView + private let contentView = UIView() + + private let searchBar = UILabel().then { + $0.text = " 브랜드, 상품, 프로필, 태그 등" + $0.font = UIFont(name: "Pretendard", size: 13.5) + $0.textColor = .lightGray + $0.backgroundColor = UIColor.systemGray5 + $0.layer.cornerRadius = 12 + $0.clipsToBounds = true + } + + private let AlarmImageView = UIImageView().then { + $0.image = UIImage(named: "alarm") + $0.contentMode = .scaleAspectFit + $0.snp.makeConstraints { make in + make.height.equalTo(19.5) + make.width.equalTo(18) + } + } + + let segmentedControl = UISegmentedControl(items: ["추천", "랭킹", "발매정보", "럭셔리", "남성", "여성"]).then { + $0.setBackgroundImage(UIImage(), for: .normal, barMetrics: .default) + $0.setBackgroundImage(UIImage(), for: .selected, barMetrics: .default) + $0.setBackgroundImage(UIImage(), for: .highlighted, barMetrics: .default) + + $0.setDividerImage(UIImage(), forLeftSegmentState: .selected, rightSegmentState: .normal, barMetrics: .default) + $0.selectedSegmentIndex = 0 + $0.setTitleTextAttributes( + [ + NSAttributedString.Key.foregroundColor: UIColor.black, + .font: UIFont.systemFont(ofSize: 16, weight: .light) + ], + for: .normal + ) + $0.setTitleTextAttributes( + [ + NSAttributedString.Key.foregroundColor: UIColor.black, + .font: UIFont.systemFont(ofSize: 16, weight: .bold) + ], + for: .selected + ) + } + + let HomeCollectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout().then { + $0.estimatedItemSize = .init(width: 61, height: 81) + $0.minimumInteritemSpacing = 9 //? + $0.minimumLineSpacing = 20 + }).then { + $0.backgroundColor = .clear + $0.isScrollEnabled = false + $0.register(HomeCollectionViewCell.self, forCellWithReuseIdentifier: HomeCollectionViewCell.identifier) + } + + private let JustDroppedLabel = UILabel().then { + $0.text = "Just Dropped" + $0.font = .systemFont(ofSize: 16, weight: .semibold) + $0.textColor = .black + } + + private let releaseLabel = UILabel().then { + $0.text = "발매 상품" + $0.font = .systemFont(ofSize: 13, weight: .light) + $0.textColor = UIColor(red: 162/255, green: 162/255, blue: 162/255, alpha: 1.0) + } + + let JustDroppedCollectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout().then { + $0.estimatedItemSize = CGSize(width: 142, height: 237) + $0.minimumInteritemSpacing = 8 + $0.scrollDirection = .horizontal + }).then { + $0.backgroundColor = .clear + $0.isScrollEnabled = true + $0.register(JustDroppedCollectionViewCell.self, forCellWithReuseIdentifier: JustDroppedCollectionViewCell.identifier) + } + + private let divideLine1 = UIView().then { + $0.backgroundColor = .black + } + + private let divideLine2 = UIView().then { + $0.backgroundColor = UIColor(red: 242/255, green: 242/255, blue: 242/255, alpha: 1.0) + } + + private let divideLine3 = UIView().then { + $0.backgroundColor = UIColor(red: 242/255, green: 242/255, blue: 242/255, alpha: 1.0) + } + + private let advertisement = UIImageView().then { + $0.image = UIImage(named: "ad") + $0.contentMode = .scaleAspectFit + } + + let emptyLabel = UILabel().then { + $0.font = .systemFont(ofSize: 24, weight: .medium) + $0.textColor = .black + $0.text = "아직 개발 중.." + $0.isHidden = true + } + + override init(frame: CGRect) { + super.init(frame: frame) + backgroundColor = .white + setupView() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupView() { + // ScrollView와 ContentView를 추가하여 스크롤 가능하도록 설정 + addSubview(scrollView) + scrollView.addSubview(contentView) + + scrollView.snp.makeConstraints { make in + make.edges.equalTo(safeAreaLayoutGuide) + } + + contentView.snp.makeConstraints { make in + make.edges.equalToSuperview() + make.width.equalToSuperview() // 스크롤 방향을 세로로 고정 + } + + // ContentView에 기존 UI 요소를 모두 추가 + [ + searchBar, + AlarmImageView, + segmentedControl, + divideLine1, + advertisement, + HomeCollectionView, + divideLine2, + JustDroppedLabel, + releaseLabel, + JustDroppedCollectionView, + divideLine3, + emptyLabel + ].forEach { + contentView.addSubview($0) + } + + searchBar.snp.makeConstraints { + $0.top.equalToSuperview().offset(51) + $0.height.equalTo(40) + $0.width.equalTo(303) + $0.leading.equalToSuperview().offset(16) + } + + AlarmImageView.snp.makeConstraints { + $0.top.equalToSuperview().offset(59) + $0.leading.equalTo(searchBar.snp.trailing).offset(15) + } + + segmentedControl.snp.makeConstraints { + $0.top.equalTo(searchBar.snp.bottom).offset(16) + $0.leading.equalToSuperview().offset(24) + $0.trailing.equalToSuperview().offset(-25) + $0.height.equalTo(27) + } + + divideLine1.snp.makeConstraints { + $0.top.equalTo(segmentedControl.snp.bottom).offset(8) + $0.horizontalEdges.equalToSuperview() + $0.height.equalTo(1) + } + + advertisement.snp.makeConstraints { + $0.top.equalTo(divideLine1.snp.bottom).offset(0) + $0.horizontalEdges.equalToSuperview() + $0.height.equalTo(advertisement.snp.width).multipliedBy(336.0 / 374.0) + } + + HomeCollectionView.snp.makeConstraints { + $0.top.equalTo(advertisement.snp.bottom).offset(20) + $0.leading.equalToSuperview().offset(16) + $0.trailing.equalToSuperview().offset(-16) + $0.height.equalTo(182) + } + + divideLine2.snp.makeConstraints { + $0.top.equalTo(HomeCollectionView.snp.bottom).offset(0) + $0.horizontalEdges.equalToSuperview() + $0.height.equalTo(1) + } + + JustDroppedLabel.snp.makeConstraints { + $0.top.equalTo(divideLine2.snp.bottom).offset(20) + $0.leading.equalToSuperview().offset(16) + $0.height.equalTo(19) + } + + releaseLabel.snp.makeConstraints { + $0.top.equalTo(divideLine2.snp.bottom).offset(43) + $0.leading.equalToSuperview().offset(16) + $0.height.equalTo(16) + } + + JustDroppedCollectionView.snp.makeConstraints { + $0.top.equalTo(releaseLabel.snp.bottom).offset(14) + $0.leading.equalToSuperview().offset(16) + $0.trailing.equalToSuperview().offset(-16) + $0.height.equalTo(237) + } + + divideLine3.snp.makeConstraints { + $0.top.equalTo(JustDroppedCollectionView.snp.bottom).offset(30) + $0.horizontalEdges.equalToSuperview() + $0.height.equalTo(1) + $0.bottom.equalToSuperview().offset(-20) // 스크롤 가능하도록 마지막 요소의 하단을 contentView에 맞춤 + + } + + emptyLabel.snp.makeConstraints { + $0.top.equalTo(divideLine3.snp.bottom).offset(20) + $0.centerX.equalToSuperview() + } + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/LoginView.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/LoginView.swift" new file mode 100644 index 0000000..5adcb5a --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/LoginView.swift" @@ -0,0 +1,163 @@ +// +// LoginView.swift +// MyKream +// +// Created by 한태빈 on 9/28/24. +// + +import UIKit + +class LoginView: UIView { + // 초기화 메서드 + override init(frame: CGRect) { + super.init(frame: frame) + self.backgroundColor = .white + self.addComponents() + self.setupAutoLayout() + } + + // init(coder:)가 사용되지 않도록 처리 + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // UIImageView를 정의 (KREAM 로고) + private let logoImageView = UIImageView().then { + $0.contentMode = .scaleAspectFit + $0.image = UIImage(named: "Kream") + } + + // 이메일 라벨 + private let emailLabel = UILabel().then { + $0.text = "이메일 주소" + $0.font = UIFont(name: "Inter", size: 12) + $0.textColor = .black + } + + // 이메일 텍스트 필드 + private let emailTextField = UITextField().then { + $0.placeholder = "예) kream@kream.co.kr" + $0.borderStyle = .roundedRect + $0.font = UIFont.systemFont(ofSize: 14) + $0.layer.cornerRadius = 15 + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.lightGray.cgColor + } + + // 비밀번호 라벨 + private let passwordLabel = UILabel().then { + $0.text = "비밀번호" + $0.font = UIFont(name: "Inter", size: 12) + $0.textColor = .black + } + + // 비밀번호 텍스트 필드 + private let passwordTextField = UITextField().then { + $0.placeholder = "비밀번호를 입력해주세요" + $0.borderStyle = .roundedRect + $0.isSecureTextEntry = true + $0.font = UIFont.systemFont(ofSize: 14) + $0.layer.cornerRadius = 15 + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.lightGray.cgColor + } + + // 로그인 버튼 + let loginButton = UIButton(type: .system).then { + $0.setTitle("로그인", for: .normal) + $0.titleLabel?.font = UIFont(name: "Inter", size: 14) + $0.backgroundColor = UIColor(red: 217/255, green: 217/255, blue: 217/255, alpha: 1) + $0.setTitleColor(.white, for: .normal) + $0.layer.cornerRadius = 8 + } + + // 소셜 로그인 버튼 (카카오톡) + let kakaoLoginButton = UIButton(type: .system).then { + $0.setTitle("카카오로 로그인", for: .normal) + $0.titleLabel?.font = UIFont(name: "Inter", size: 13) + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.gray.cgColor + $0.layer.cornerRadius = 10 + } + + // 소셜 로그인 버튼 (Apple) + let appleLoginButton = UIButton(type: .system).then { + $0.setTitle("Apple로 로그인", for: .normal) + $0.titleLabel?.font = UIFont(name: "Inter", size: 13) + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.gray.cgColor + $0.layer.cornerRadius = 10 + } + + // UI 요소들을 뷰에 추가하는 메서드 + private func addComponents() { + [logoImageView, emailLabel, emailTextField, passwordLabel, passwordTextField, loginButton, kakaoLoginButton, appleLoginButton].forEach { + self.addSubview($0) + } + } + + // AutoLayout 설정 메서드 + private func setupAutoLayout() { + logoImageView.snp.makeConstraints { + $0.top.equalTo(self.safeAreaLayoutGuide).offset(126) + $0.left.equalToSuperview().offset(53) + $0.right.equalToSuperview().inset(53) + $0.width.equalTo(287) + $0.height.equalTo(75) + } + + emailLabel.snp.makeConstraints { + $0.width.equalTo(303) + $0.height.equalTo(15) + $0.left.equalToSuperview().offset(45) + $0.top.equalTo(logoImageView.snp.bottom).offset(87) + } + + emailTextField.snp.makeConstraints { + $0.width.equalTo(303) + $0.height.equalTo(34) + $0.top.equalTo(emailLabel.snp.bottom).offset(8) + $0.left.equalToSuperview().offset(45) + $0.right.equalToSuperview().inset(45) + } + + passwordLabel.snp.makeConstraints { + $0.width.equalTo(303) + $0.height.equalTo(15) + $0.top.equalTo(emailTextField.snp.bottom).offset(17) + $0.left.equalToSuperview().offset(45) + } + + passwordTextField.snp.makeConstraints { + $0.width.equalTo(303) + $0.height.equalTo(34) + $0.top.equalTo(passwordLabel.snp.bottom).offset(8) + $0.left.equalToSuperview().offset(45) + $0.right.equalToSuperview().inset(45) + } + + loginButton.snp.makeConstraints { + $0.top.equalTo(passwordTextField.snp.bottom).offset(17) + $0.left.equalToSuperview().offset(45) + $0.right.equalToSuperview().inset(45) + $0.height.equalTo(38) + } + + kakaoLoginButton.snp.makeConstraints { + $0.top.equalTo(loginButton.snp.bottom).offset(87) + $0.left.equalToSuperview().offset(47.5) + $0.right.equalToSuperview().inset(47.5) + $0.width.equalTo(298) + $0.height.equalTo(40) + } + + appleLoginButton.snp.makeConstraints { + $0.top.equalTo(kakaoLoginButton.snp.bottom).offset(22) + $0.left.equalToSuperview().offset(47.5) + $0.right.equalToSuperview().inset(47.5) + $0.width.equalTo(298) + $0.height.equalTo(40) + } + } +} + diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/ManageProfilePageView.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/ManageProfilePageView.swift" new file mode 100644 index 0000000..f39f204 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/ManageProfilePageView.swift" @@ -0,0 +1,133 @@ +import UIKit + +class ManageProfilePageView: UIView { + + override init(frame: CGRect) { + super.init(frame: frame) + self.backgroundColor = .white + self.addComponents() + self.setupConstraints() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private let profileImageView = UIImageView().then { + $0.image = UIImage(named: "profile") + $0.contentMode = .scaleAspectFit + } + + private let profileInfo = UILabel().then { + $0.text = "프로필 정보" + $0.font = UIFont(name: "Pretendard", size: 18) + $0.textColor = .black + } + + private let userEmail = UILabel().then { + $0.text = "유저 이메일" + $0.font = UIFont(name: "Pretendard", size: 14) + $0.textColor = .black + } + + private let userEmailTextField = UITextField().then { + $0.placeholder = "taebin325@gmail.com" + $0.borderStyle = .roundedRect + $0.font = UIFont(name: "Pretendard", size: 14) + $0.textColor = .black + $0.layer.cornerRadius = 10 + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.lightGray.cgColor + } + + private let userPw = UILabel().then { + $0.text = "유저 비밀번호" + $0.font = UIFont(name: "Pretendard", size: 14) + $0.textColor = .black + } + + private let userPwTextField = UITextField().then { + $0.placeholder = "qpalzm()" + $0.borderStyle = .roundedRect + $0.font = UIFont(name: "Pretendard", size: 14) + $0.textColor = .black + $0.layer.cornerRadius = 10 + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.lightGray.cgColor + } + + // 변경 버튼을 프로퍼티로 정의 (internal로 설정하여 ViewController에서 접근 가능) + let changeButton = UIButton(type: .system).then { + $0.setTitle("변경", for: .normal) + $0.titleLabel?.font = UIFont(name: "Pretendard", size: 14) + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.black.cgColor + $0.layer.cornerRadius = 6 + } + + let changeButton2 = UIButton(type: .system).then { + $0.setTitle("변경", for: .normal) + $0.titleLabel?.font = UIFont(name: "Pretendard", size: 14) + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.black.cgColor + $0.layer.cornerRadius = 6 + } + + private func addComponents() { + [profileImageView, profileInfo, userEmail, userEmailTextField, userPw, userPwTextField, changeButton, changeButton2].forEach { + self.addSubview($0) + } + } + + private func setupConstraints() { + profileImageView.snp.makeConstraints { make in + make.height.width.equalTo(90) + make.top.equalToSuperview().offset(144) + make.leading.equalToSuperview().offset(151) + } + + profileInfo.snp.makeConstraints { make in + make.top.equalTo(profileImageView.snp.bottom).offset(20) + make.leading.equalToSuperview().offset(27) + } + + userEmail.snp.makeConstraints { make in + make.top.equalTo(profileInfo.snp.bottom).offset(23) + make.leading.equalToSuperview().offset(27) + } + + userEmailTextField.snp.makeConstraints { make in + make.height.equalTo(32) + make.width.equalTo(282) + make.leading.equalToSuperview().offset(27) + make.top.equalTo(userEmail.snp.bottom).offset(4) + } + + userPw.snp.makeConstraints { make in + make.top.equalTo(userEmailTextField.snp.bottom).offset(23) + make.leading.equalToSuperview().offset(27) + } + + userPwTextField.snp.makeConstraints { make in + make.height.equalTo(32) + make.width.equalTo(282) + make.leading.equalToSuperview().offset(27) + make.top.equalTo(userPw.snp.bottom).offset(4) + } + + changeButton.snp.makeConstraints { make in + make.height.equalTo(32) + make.width.equalTo(58) + make.leading.equalTo(userEmailTextField.snp.trailing).offset(9) + make.top.equalTo(userEmailTextField.snp.top) + } + + changeButton2.snp.makeConstraints { make in + make.height.equalTo(32) + make.width.equalTo(58) + make.leading.equalTo(userPwTextField.snp.trailing).offset(9) + make.top.equalTo(userPwTextField.snp.top) + } + } +} + diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/MyPageView.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/MyPageView.swift" new file mode 100644 index 0000000..abdf19d --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/MyPageView.swift" @@ -0,0 +1,133 @@ +import UIKit + + +class MyPageView: UIView { + + override init(frame: CGRect) { + super.init(frame: frame) + self.backgroundColor = .white + self.addComponents() + self.setupConstraints() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // SettingImageView + private let settingImageView = UIImageView().then { + $0.image = UIImage(named: "setting") + $0.contentMode = .scaleAspectFit + } + + // CameraImageView + private let cameraImageView = UIImageView().then { + $0.image = UIImage(named: "camera") + $0.contentMode = .scaleAspectFit + } + + // ProfileImageView + private let profileImageView = UIImageView().then { + $0.image = UIImage(named: "profile") + $0.contentMode = .scaleAspectFit + } + + // ProfileName Label + private let profileName = UILabel().then { + $0.text = "Xoqls_iOS" + $0.font = UIFont(name: "Pretendard", size: 16) + $0.textColor = .black + } + + // FollowerCount Label + private let followerCount = UILabel().then { + $0.text = "팔로워 489" + $0.font = UIFont(name: "Pretendard", size: 12) + $0.textColor = .black + } + + // FollowingCount Label + private let followingCount = UILabel().then { + $0.text = "팔로잉 486" + $0.font = UIFont(name: "Pretendard", size: 12) + $0.textColor = .black + } + + // ManageButton + let manageButton = UIButton(type: .system).then { + $0.setTitle("프로필 관리", for: .normal) + $0.titleLabel?.font = UIFont(name: "Pretendard", size: 9) + $0.setTitleColor(.black, for: .normal) + $0.layer.borderWidth = 0.8 + $0.layer.borderColor = UIColor.gray.cgColor + $0.layer.cornerRadius = 8 + } + + // ShareButton + private let shareButton = UIButton(type: .system).then { + $0.setTitle("프로필 공유", for: .normal) + $0.titleLabel?.font = UIFont(name: "Pretendard", size: 9) + $0.setTitleColor(.black, for: .normal) + $0.layer.borderWidth = 0.8 + $0.layer.borderColor = UIColor.gray.cgColor + $0.layer.cornerRadius = 8 + } + + // Add components to view + private func addComponents() { + [settingImageView, cameraImageView, profileImageView, profileName, followerCount, followingCount, manageButton, shareButton].forEach { + self.addSubview($0) + } + } + + // Setup constraints + private func setupConstraints() { + settingImageView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(75) + make.leading.equalToSuperview().offset(32.5) + make.height.width.equalTo(25) + } + + cameraImageView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(75) + make.trailing.equalToSuperview().inset(32.5) + make.height.width.equalTo(25) + } + + profileImageView.snp.makeConstraints { make in + make.height.width.equalTo(90) + make.top.equalToSuperview().offset(126) + make.leading.equalToSuperview().offset(32.5) + } + + profileName.snp.makeConstraints { make in + make.leading.equalTo(profileImageView.snp.trailing).offset(16) + make.top.equalToSuperview().offset(147) + } + + followerCount.snp.makeConstraints { make in + make.leading.equalTo(profileImageView.snp.trailing).offset(16) + make.top.equalTo(profileName.snp.bottom).offset(6) + } + + followingCount.snp.makeConstraints { make in + make.leading.equalTo(followerCount.snp.trailing).offset(8) + make.top.equalTo(profileName.snp.bottom).offset(6) + } + + manageButton.snp.makeConstraints { make in + make.top.equalToSuperview().offset(242) + make.leading.equalToSuperview().offset(32.5) + make.width.equalTo(157) + make.height.equalTo(26) + } + + shareButton.snp.makeConstraints { make in + make.top.equalToSuperview().offset(242) + make.leading.equalTo(manageButton.snp.trailing).offset(14) + make.width.equalTo(157) + make.height.equalTo(26) + } + } +} + diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/ProductView.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/ProductView.swift" new file mode 100644 index 0000000..b4f79f8 --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/ProductView.swift" @@ -0,0 +1,117 @@ +import UIKit +import SnapKit + +class ProductView: UIView { + + private let mainproductImageView = UIImageView().then { + $0.image = UIImage(named: "matinkimblack") + $0.contentMode = .scaleAspectFit + } + + let MatinKimCollectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout().then { + $0.estimatedItemSize = .init(width: 53, height: 53) + $0.minimumInteritemSpacing = 8 + $0.scrollDirection = .horizontal + }).then { + $0.backgroundColor = .clear + $0.isScrollEnabled = true + $0.register(JustDroppedCollectionViewCell.self, forCellWithReuseIdentifier: JustDroppedCollectionViewCell.identifier) + } + + private let buynowprice = UILabel().then { + $0.text = "즉시 구매가" + $0.font = .systemFont(ofSize: 12, weight: .light) + $0.textColor = .black + } + + private let productprice = UILabel().then { + $0.text = "228,000원" + $0.font = .systemFont(ofSize: 20, weight: .semibold) + $0.textColor = .black + } + + private let productname = UILabel().then { + $0.text = "Matin Kim Logo Coating Jumper" + $0.font = .systemFont(ofSize: 16, weight: .regular) + $0.textColor = .black + } + + private let productkname = UILabel().then { + $0.text = "마땡킴 로고 코팅 점퍼 블랙" + $0.font = .systemFont(ofSize: 12, weight: .regular) + $0.textColor = UIColor(red: 162/255, green: 162/255, blue: 162/255, alpha: 1.0) + } + + private let divideLine = UIView().then { + $0.backgroundColor = .black + } + + // 초기화 메서드 + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + setupLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupView() { + // 모든 UI 요소를 뷰에 추가 + addSubview(mainproductImageView) + addSubview(MatinKimCollectionView) + addSubview(productname) + addSubview(productkname) + addSubview(buynowprice) + addSubview(productprice) + addSubview(divideLine) + } + + private func setupLayout() { + // mainproductImageView 레이아웃 + mainproductImageView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(48) + make.horizontalEdges.equalToSuperview() + make.height.equalTo(373) + make.width.equalTo(374) + } + + // MatinKimCollectionView 레이아웃 + MatinKimCollectionView.snp.makeConstraints { make in + make.top.equalTo(mainproductImageView.snp.bottom).offset(20) + make.leading.trailing.equalToSuperview() + make.height.equalTo(53) + } + + // buynowprice 레이아웃 + buynowprice.snp.makeConstraints { make in + make.top.equalTo(MatinKimCollectionView.snp.bottom).offset(23) + make.leading.equalToSuperview().inset(16) + } + + // productprice 레이아웃 + productprice.snp.makeConstraints { make in + make.top.equalTo(buynowprice.snp.bottom).offset(4) + make.leading.equalToSuperview().inset(16) + } + + // productname 레이아웃 + productname.snp.makeConstraints { make in + make.top.equalTo(productprice.snp.bottom).offset(18) + make.leading.trailing.equalToSuperview().inset(16) + } + + // productkname 레이아웃 + productkname.snp.makeConstraints { make in + make.top.equalTo(productname.snp.bottom).offset(6) + make.leading.trailing.equalToSuperview().inset(16) + } + + // divideLine 레이아웃 + divideLine.snp.makeConstraints { make in + make.top.equalTo(productkname.snp.bottom).offset(54) + make.height.equalTo(1) + } + } +} diff --git "a/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/SizeView.swift" "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/SizeView.swift" new file mode 100644 index 0000000..66cdc0d --- /dev/null +++ "b/week6/KREAM \353\263\265\354\202\254\353\263\270/Views/SizeView.swift" @@ -0,0 +1,20 @@ +// +// SizeView.swift +// KREAM +// +// Created by 한태빈 on 11/8/24. +// + +import UIKit + +class SizeView: UIView { + + /* + // Only override draw() if you perform custom drawing. + // An empty implementation adversely affects performance during animation. + override func draw(_ rect: CGRect) { + // Drawing code + } + */ + +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270.xcodeproj/project.pbxproj" "b/week7/KREAM \353\263\265\354\202\254\353\263\270.xcodeproj/project.pbxproj" new file mode 100644 index 0000000..e28a497 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270.xcodeproj/project.pbxproj" @@ -0,0 +1,595 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 1EB2ABA82CBE850400782620 /* Then in Frameworks */ = {isa = PBXBuildFile; productRef = 1EB2ABA72CBE850400782620 /* Then */; }; + 1ECD20322CB995D3007DFF8D /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = 1ECD20312CB995D3007DFF8D /* SnapKit */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 1ECD1FE72CB9774B007DFF8D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1ECD1FC82CB97749007DFF8D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1ECD1FCF2CB97749007DFF8D; + remoteInfo = KREAM; + }; + 1ECD1FF12CB9774B007DFF8D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1ECD1FC82CB97749007DFF8D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1ECD1FCF2CB97749007DFF8D; + remoteInfo = KREAM; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 1ECD1FD02CB97749007DFF8D /* KREAM.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KREAM.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 1ECD1FE62CB9774B007DFF8D /* KREAMTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KREAMTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 1ECD1FF02CB9774B007DFF8D /* KREAMUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KREAMUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 1ECD202F2CB97C76007DFF8D /* Exceptions for "KREAM" folder in "KREAM" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = 1ECD1FCF2CB97749007DFF8D /* KREAM */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 1ECD1FD22CB97749007DFF8D /* KREAM */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 1ECD202F2CB97C76007DFF8D /* Exceptions for "KREAM" folder in "KREAM" target */, + ); + path = KREAM; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1ECD1FCD2CB97749007DFF8D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1ECD20322CB995D3007DFF8D /* SnapKit in Frameworks */, + 1EB2ABA82CBE850400782620 /* Then in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ECD1FE32CB9774B007DFF8D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ECD1FED2CB9774B007DFF8D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1ECD1FC72CB97749007DFF8D = { + isa = PBXGroup; + children = ( + 1ECD1FD22CB97749007DFF8D /* KREAM */, + 1ECD1FD12CB97749007DFF8D /* Products */, + ); + sourceTree = ""; + }; + 1ECD1FD12CB97749007DFF8D /* Products */ = { + isa = PBXGroup; + children = ( + 1ECD1FD02CB97749007DFF8D /* KREAM.app */, + 1ECD1FE62CB9774B007DFF8D /* KREAMTests.xctest */, + 1ECD1FF02CB9774B007DFF8D /* KREAMUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1ECD1FCF2CB97749007DFF8D /* KREAM */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1ECD1FF92CB9774B007DFF8D /* Build configuration list for PBXNativeTarget "KREAM" */; + buildPhases = ( + 1ECD1FCC2CB97749007DFF8D /* Sources */, + 1ECD1FCD2CB97749007DFF8D /* Frameworks */, + 1ECD1FCE2CB97749007DFF8D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 1ECD1FD22CB97749007DFF8D /* KREAM */, + ); + name = KREAM; + packageProductDependencies = ( + 1ECD20312CB995D3007DFF8D /* SnapKit */, + 1EB2ABA72CBE850400782620 /* Then */, + ); + productName = KREAM; + productReference = 1ECD1FD02CB97749007DFF8D /* KREAM.app */; + productType = "com.apple.product-type.application"; + }; + 1ECD1FE52CB9774B007DFF8D /* KREAMTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1ECD1FFE2CB9774B007DFF8D /* Build configuration list for PBXNativeTarget "KREAMTests" */; + buildPhases = ( + 1ECD1FE22CB9774B007DFF8D /* Sources */, + 1ECD1FE32CB9774B007DFF8D /* Frameworks */, + 1ECD1FE42CB9774B007DFF8D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 1ECD1FE82CB9774B007DFF8D /* PBXTargetDependency */, + ); + name = KREAMTests; + packageProductDependencies = ( + ); + productName = KREAMTests; + productReference = 1ECD1FE62CB9774B007DFF8D /* KREAMTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 1ECD1FEF2CB9774B007DFF8D /* KREAMUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1ECD20012CB9774B007DFF8D /* Build configuration list for PBXNativeTarget "KREAMUITests" */; + buildPhases = ( + 1ECD1FEC2CB9774B007DFF8D /* Sources */, + 1ECD1FED2CB9774B007DFF8D /* Frameworks */, + 1ECD1FEE2CB9774B007DFF8D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 1ECD1FF22CB9774B007DFF8D /* PBXTargetDependency */, + ); + name = KREAMUITests; + packageProductDependencies = ( + ); + productName = KREAMUITests; + productReference = 1ECD1FF02CB9774B007DFF8D /* KREAMUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 1ECD1FC82CB97749007DFF8D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1600; + LastUpgradeCheck = 1600; + TargetAttributes = { + 1ECD1FCF2CB97749007DFF8D = { + CreatedOnToolsVersion = 16.0; + }; + 1ECD1FE52CB9774B007DFF8D = { + CreatedOnToolsVersion = 16.0; + TestTargetID = 1ECD1FCF2CB97749007DFF8D; + }; + 1ECD1FEF2CB9774B007DFF8D = { + CreatedOnToolsVersion = 16.0; + TestTargetID = 1ECD1FCF2CB97749007DFF8D; + }; + }; + }; + buildConfigurationList = 1ECD1FCB2CB97749007DFF8D /* Build configuration list for PBXProject "KREAM" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 1ECD1FC72CB97749007DFF8D; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 1ECD20302CB995D3007DFF8D /* XCRemoteSwiftPackageReference "SnapKit" */, + 1EB2ABA62CBE850400782620 /* XCRemoteSwiftPackageReference "Then" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 1ECD1FD12CB97749007DFF8D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 1ECD1FCF2CB97749007DFF8D /* KREAM */, + 1ECD1FE52CB9774B007DFF8D /* KREAMTests */, + 1ECD1FEF2CB9774B007DFF8D /* KREAMUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1ECD1FCE2CB97749007DFF8D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ECD1FE42CB9774B007DFF8D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ECD1FEE2CB9774B007DFF8D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1ECD1FCC2CB97749007DFF8D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ECD1FE22CB9774B007DFF8D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ECD1FEC2CB9774B007DFF8D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 1ECD1FE82CB9774B007DFF8D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1ECD1FCF2CB97749007DFF8D /* KREAM */; + targetProxy = 1ECD1FE72CB9774B007DFF8D /* PBXContainerItemProxy */; + }; + 1ECD1FF22CB9774B007DFF8D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1ECD1FCF2CB97749007DFF8D /* KREAM */; + targetProxy = 1ECD1FF12CB9774B007DFF8D /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 1ECD1FFA2CB9774B007DFF8D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = KREAM/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = umciosstudy.KREAM; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 1ECD1FFB2CB9774B007DFF8D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = KREAM/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = umciosstudy.KREAM; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 1ECD1FFC2CB9774B007DFF8D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = /Users/taebin2/Desktop/KREAM/KREAM/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 1ECD1FFD2CB9774B007DFF8D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = /Users/taebin2/Desktop/KREAM/KREAM/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 1ECD1FFF2CB9774B007DFF8D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = umciosstudy.KREAMTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KREAM.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/KREAM"; + }; + name = Debug; + }; + 1ECD20002CB9774B007DFF8D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = umciosstudy.KREAMTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KREAM.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/KREAM"; + }; + name = Release; + }; + 1ECD20022CB9774B007DFF8D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = umciosstudy.KREAMUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = KREAM; + }; + name = Debug; + }; + 1ECD20032CB9774B007DFF8D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = umciosstudy.KREAMUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = KREAM; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1ECD1FCB2CB97749007DFF8D /* Build configuration list for PBXProject "KREAM" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1ECD1FFC2CB9774B007DFF8D /* Debug */, + 1ECD1FFD2CB9774B007DFF8D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1ECD1FF92CB9774B007DFF8D /* Build configuration list for PBXNativeTarget "KREAM" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1ECD1FFA2CB9774B007DFF8D /* Debug */, + 1ECD1FFB2CB9774B007DFF8D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1ECD1FFE2CB9774B007DFF8D /* Build configuration list for PBXNativeTarget "KREAMTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1ECD1FFF2CB9774B007DFF8D /* Debug */, + 1ECD20002CB9774B007DFF8D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1ECD20012CB9774B007DFF8D /* Build configuration list for PBXNativeTarget "KREAMUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1ECD20022CB9774B007DFF8D /* Debug */, + 1ECD20032CB9774B007DFF8D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 1EB2ABA62CBE850400782620 /* XCRemoteSwiftPackageReference "Then" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/devxoul/Then"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 3.0.0; + }; + }; + 1ECD20302CB995D3007DFF8D /* XCRemoteSwiftPackageReference "SnapKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SnapKit/SnapKit"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.7.1; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 1EB2ABA72CBE850400782620 /* Then */ = { + isa = XCSwiftPackageProductDependency; + package = 1EB2ABA62CBE850400782620 /* XCRemoteSwiftPackageReference "Then" */; + productName = Then; + }; + 1ECD20312CB995D3007DFF8D /* SnapKit */ = { + isa = XCSwiftPackageProductDependency; + package = 1ECD20302CB995D3007DFF8D /* XCRemoteSwiftPackageReference "SnapKit" */; + productName = SnapKit; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 1ECD1FC82CB97749007DFF8D /* Project object */; +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270.xcodeproj/xcshareddata/xcschemes/KREAM.xcscheme" "b/week7/KREAM \353\263\265\354\202\254\353\263\270.xcodeproj/xcshareddata/xcschemes/KREAM.xcscheme" new file mode 100644 index 0000000..3fc2aec --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270.xcodeproj/xcshareddata/xcschemes/KREAM.xcscheme" @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/AppDelegate.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/AppDelegate.swift" new file mode 100644 index 0000000..cbb8d3c --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/AppDelegate.swift" @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// UMCKream +// +// Created by 한태빈 on 9/30/24. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/AccentColor.colorset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/AccentColor.colorset/Contents.json" new file mode 100644 index 0000000..eb87897 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/AccentColor.colorset/Contents.json" @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/AppIcon.appiconset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 0000000..2305880 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Contents.json" new file mode 100644 index 0000000..73c0059 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Contents.json" @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped1.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped1.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped1.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped1.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped1.imageset/Image.png" new file mode 100644 index 0000000..3fcfc1a Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped1.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped2.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped2.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped2.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped2.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped2.imageset/Image.png" new file mode 100644 index 0000000..55198f8 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped2.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped3.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped3.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped3.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped3.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped3.imageset/Image.png" new file mode 100644 index 0000000..a0c2f2c Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/JustDropped3.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Kream.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Kream.imageset/Contents.json" new file mode 100644 index 0000000..b29f1b7 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Kream.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Kream.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Kream.imageset/Kream.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Kream.imageset/Kream.png" new file mode 100644 index 0000000..93bce3c Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/Kream.imageset/Kream.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAW.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAW.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAW.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAW.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAW.imageset/Image.png" new file mode 100644 index 0000000..dbe8ac1 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAW.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAcne.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAcne.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAcne.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAcne.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAcne.imageset/Image.png" new file mode 100644 index 0000000..4e6f735 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainAcne.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainChart.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainChart.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainChart.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainChart.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainChart.imageset/Image.png" new file mode 100644 index 0000000..bc8e505 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainChart.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainCheap.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainCheap.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainCheap.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainCheap.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainCheap.imageset/Image.png" new file mode 100644 index 0000000..dbe8ac1 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainCheap.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDecember.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDecember.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDecember.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDecember.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDecember.imageset/Image.png" new file mode 100644 index 0000000..aba421a Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDecember.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDraw.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDraw.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDraw.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDraw.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDraw.imageset/Image.png" new file mode 100644 index 0000000..c49488e Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainDraw.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainMen.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainMen.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainMen.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainMen.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainMen.imageset/Image.png" new file mode 100644 index 0000000..6424d05 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainMen.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainUnique.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainUnique.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainUnique.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainUnique.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainUnique.imageset/Image.png" new file mode 100644 index 0000000..3934478 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainUnique.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainWomen.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainWomen.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainWomen.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainWomen.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainWomen.imageset/Image.png" new file mode 100644 index 0000000..68d8e60 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainWomen.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainYB.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainYB.imageset/Contents.json" new file mode 100644 index 0000000..62beec5 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainYB.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainYB.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainYB.imageset/Image.png" new file mode 100644 index 0000000..16fc6c9 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/MainYB.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/ad.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/ad.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/ad.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/ad.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/ad.imageset/Image.png" new file mode 100644 index 0000000..7ebe91c Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/ad.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/alarm.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/alarm.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/alarm.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/alarm.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/alarm.imageset/Image.png" new file mode 100644 index 0000000..67b696f Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/alarm.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/camera.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/camera.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/camera.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/camera.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/camera.imageset/Image.png" new file mode 100644 index 0000000..d6ac03d Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/camera.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/home.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/home.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/home.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/home.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/home.imageset/Image.png" new file mode 100644 index 0000000..70f1873 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/home.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblack.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblack.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblack.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblack.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblack.imageset/Image.png" new file mode 100644 index 0000000..f9c905e Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblack.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblue.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblue.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblue.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblue.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblue.imageset/Image.png" new file mode 100644 index 0000000..451ae48 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimblue.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimbrown.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimbrown.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimbrown.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimbrown.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimbrown.imageset/Image.png" new file mode 100644 index 0000000..7edf67f Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimbrown.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimburgundy.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimburgundy.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimburgundy.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimburgundy.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimburgundy.imageset/Image.png" new file mode 100644 index 0000000..fa0950a Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimburgundy.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimcherry.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimcherry.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimcherry.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimcherry.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimcherry.imageset/Image.png" new file mode 100644 index 0000000..ea28897 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimcherry.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimgreen.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimgreen.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimgreen.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimgreen.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimgreen.imageset/Image.png" new file mode 100644 index 0000000..fdf52aa Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimgreen.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimlast.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimlast.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimlast.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimlast.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimlast.imageset/Image.png" new file mode 100644 index 0000000..d6d1b25 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimlast.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimpurple.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimpurple.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimpurple.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimpurple.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimpurple.imageset/Image.png" new file mode 100644 index 0000000..a7d8db0 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/matinkimpurple.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/my.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/my.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/my.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/my.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/my.imageset/Image.png" new file mode 100644 index 0000000..68be4e5 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/my.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/profile.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/profile.imageset/Contents.json" new file mode 100644 index 0000000..962e49c --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/profile.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "profile.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/profile.imageset/profile.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/profile.imageset/profile.png" new file mode 100644 index 0000000..d1721da Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/profile.imageset/profile.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/saved.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/saved.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/saved.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/saved.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/saved.imageset/Image.png" new file mode 100644 index 0000000..c2e3937 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/saved.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/setting.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/setting.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/setting.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/setting.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/setting.imageset/Image.png" new file mode 100644 index 0000000..4821736 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/setting.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/shop.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/shop.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/shop.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/shop.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/shop.imageset/Image.png" new file mode 100644 index 0000000..c7e0cd5 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/shop.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/style.imageset/Contents.json" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/style.imageset/Contents.json" new file mode 100644 index 0000000..17f6fd9 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/style.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/style.imageset/Image.png" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/style.imageset/Image.png" new file mode 100644 index 0000000..b341391 Binary files /dev/null and "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Assets.xcassets/style.imageset/Image.png" differ diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Collect/FWMustHavesCollectionViewCell.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Collect/FWMustHavesCollectionViewCell.swift" new file mode 100644 index 0000000..dcb8302 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Collect/FWMustHavesCollectionViewCell.swift" @@ -0,0 +1,12 @@ +// +// FWMustHavesCollectionViewCell.swift +// KREAM +// +// Created by 한태빈 on 10/30/24. +// + +import UIKit + +class FWMustHavesCollectionViewCell: UICollectionViewCell { + +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Collect/HomeCollecionViewCell.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Collect/HomeCollecionViewCell.swift" new file mode 100644 index 0000000..171d72b --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Collect/HomeCollecionViewCell.swift" @@ -0,0 +1,46 @@ +// Created by 한태빈 on 10/15/24. +// + +import UIKit + +class HomeCollectionViewCell: UICollectionViewCell { + static let identifier = "HomeCollectionViewCell" + + let imageView = UIImageView().then { + $0.contentMode = .scaleAspectFill + $0.clipsToBounds = true + } + + let titleLabel = UILabel().then { + $0.font = .systemFont(ofSize: 11.5, weight: .light) + $0.textColor = .black + $0.textAlignment = .center + $0.text = "크림 드로우" + } + override init(frame: CGRect) { + super.init(frame: frame) + + setupView() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupView(){ + addSubview(imageView) + addSubview(titleLabel) + + imageView.snp.makeConstraints { + $0.top.horizontalEdges.equalToSuperview() + $0.height.equalTo(61) + $0.width.equalTo(61) + + } + + titleLabel.snp.makeConstraints{ + $0.bottom.equalToSuperview() + $0.centerX.equalToSuperview() + } + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Collect/JustDroppedCollectionViewCell.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Collect/JustDroppedCollectionViewCell.swift" new file mode 100644 index 0000000..cf81ec5 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Collect/JustDroppedCollectionViewCell.swift" @@ -0,0 +1,118 @@ +import UIKit + +class JustDroppedCollectionViewCell: UICollectionViewCell { + static let identifier = "JustDroppedCollectionViewCell" + + // 모델 설정 + var model: JustDroppedModel? { + didSet { + updateBookmarkState() // 모델이 설정될 때 북마크 상태 업데이트 + } + } + + // 이미지 뷰 + let imageView = UIImageView().then { + $0.contentMode = .scaleAspectFill + $0.clipsToBounds = true + } + + // 거래량 라벨 + let titleLabel = UILabel().then { + $0.font = .systemFont(ofSize: 10, weight: .regular) + $0.textColor = UIColor(red: 64/255, green: 69/255, blue: 75/255, alpha: 1.0) + $0.textAlignment = .center + } + + // 북마크 버튼 + let saveButton = UIButton().then { + $0.tintColor = UIColor.black + } + + // 브랜드명 라벨 + let brandLabel = UILabel().then { + $0.font = .systemFont(ofSize: 12, weight: .semibold) + $0.textColor = .black + } + + // 상품명 라벨 + let productLabel = UILabel().then { + $0.font = .systemFont(ofSize: 12, weight: .light) + $0.textColor = .black + } + + // 가격 라벨 + let priceLabel = UILabel().then { + $0.font = .systemFont(ofSize: 13, weight: .semibold) + $0.textColor = .black + } + + let nowBuyingLabel = UILabel().then { + $0.font = .systemFont(ofSize: 10, weight: .light) + $0.textColor = UIColor(red: 162/255, green: 162/255, blue: 162/255, alpha: 1.0) + } + + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupView() { + // 서브뷰 추가 + [imageView, titleLabel, saveButton, brandLabel, productLabel, priceLabel, nowBuyingLabel].forEach { + contentView.addSubview($0) + } + + // 레이아웃 설정 + imageView.snp.makeConstraints { make in + make.top.horizontalEdges.equalToSuperview() + make.height.equalTo(142) + make.width.equalTo(142) + } + + titleLabel.snp.makeConstraints { make in + make.top.equalTo(imageView.snp.top).offset(8) + make.trailing.equalTo(imageView.snp.trailing).offset(-8) + } + + saveButton.snp.makeConstraints { make in + make.top.equalTo(imageView.snp.top).offset(112) + make.trailing.equalTo(imageView.snp.trailing).offset(-10) + make.height.equalTo(20) + make.width.equalTo(22) + } + + brandLabel.snp.makeConstraints { make in + make.top.equalTo(imageView.snp.bottom).offset(8) + make.leading.equalTo(imageView.snp.leading).offset(4) + } + + productLabel.snp.makeConstraints { make in + make.top.equalTo(brandLabel.snp.bottom).offset(3) + make.leading.equalTo(imageView.snp.leading).offset(4) + } + + priceLabel.snp.makeConstraints { make in + make.top.equalTo(brandLabel.snp.bottom).offset(43) + make.leading.equalTo(imageView.snp.leading).offset(4) + } + + nowBuyingLabel.snp.makeConstraints { make in + make.top.equalTo(priceLabel.snp.bottom).offset(2) + make.leading.equalTo(imageView.snp.leading).offset(4) + } + } + + // 북마크 상태 업데이트 메서드 + private func updateBookmarkState() { + guard let model = model else { return } + + // isBookmarked가 true이면 채워진 아이콘, false이면 빈 아이콘 설정 + let iconName = model.isBookmarked ? "bookmark.fill" : "bookmark" + saveButton.setImage(UIImage(systemName: iconName), for: .normal) + } + +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Collect/MatinKimCollectionViewCell.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Collect/MatinKimCollectionViewCell.swift" new file mode 100644 index 0000000..d37dc1a --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Collect/MatinKimCollectionViewCell.swift" @@ -0,0 +1,28 @@ +// +// MatinKimCollectionViewCell.swift +// KREAM +// +// Created by 한태빈 on 11/9/24. +// + +import UIKit + +class MatinKimCollectionViewCell: UICollectionViewCell { + + static let identifier = "MatinKimCollectionViewCell" + let imageView = UIImageView().then { + $0.contentMode = .scaleAspectFill + $0.clipsToBounds = true + } + + func setupView(){ + addSubview(imageView) + + imageView.snp.makeConstraints { + $0.top.horizontalEdges.equalToSuperview() + $0.height.equalTo(53) + $0.width.equalTo(53) + + } + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Models/HomeModel.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Models/HomeModel.swift" new file mode 100644 index 0000000..87780da --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Models/HomeModel.swift" @@ -0,0 +1,27 @@ + +// Created by 한태빈 on 10/15/24. +// + +import UIKit + +struct HomeModel{ + let image: UIImage + let name: String +} + +extension HomeModel{ + static func Makedummy() ->[HomeModel]{ + return[ + HomeModel(image: .mainDraw, name: "크림 드로우"), + HomeModel(image: .mainChart, name: "실시간 차트"), + HomeModel(image: .mainMen, name: "남성 추천"), + HomeModel(image: .mainWomen, name: "여성 추천"), + HomeModel(image: .mainUnique, name: "색다른 추천"), + HomeModel(image: .mainCheap, name: "정가 아래"), + HomeModel(image: .mainAW, name: "윤세 24AW"), + HomeModel(image: .mainYB, name: "올해의 베스트"), + HomeModel(image: .mainDecember, name: "10월의 베네핏"), + HomeModel(image: .mainAcne, name: "아크네 선물") + ] + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Models/JustDroppedModel.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Models/JustDroppedModel.swift" new file mode 100644 index 0000000..82afede --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Models/JustDroppedModel.swift" @@ -0,0 +1,48 @@ +import UIKit + +struct JustDroppedModel { + let image: UIImage //상품 이미지 + let transactionCount: String //(예: "거래 12.8만") + let brandName: String //(예: "MLB") + let productName: String //(예: "청키라이너 뉴욕양키스") + let price: String //(예: "139,000원") + let buyNowLabel: String //(예: "즉시 구매가") + var isBookmarked: Bool // 저장 여부 (북마크 상태) +} + +extension JustDroppedModel { + // 더미 데이터 생성 메서드 + static func MakeDummy2() -> [JustDroppedModel] { + return [ + JustDroppedModel( + image:.justDropped1, + transactionCount: "거래 12.8만", + brandName: "MLB", + productName: "청키라이너 뉴욕양키스", + price: "139,000원", + buyNowLabel: "즉시 구매가", + isBookmarked: false + ), + + JustDroppedModel( + image:.justDropped2, + transactionCount: "거래 15.6만", + brandName: "Jordan", + productName: "Jordan 1 Retro High OG\n Yellow Ochre", + price: "228,000원", + buyNowLabel: "즉시 구매가", + isBookmarked: true + ), + + JustDroppedModel( + image:.matinkimblack, + transactionCount: "거래 12.8만", + brandName: "Matin Kim", + productName: "Matin Kim Logo Coating Jumper", + price: "228,000원", + buyNowLabel: "즉시 구매가", + isBookmarked: false + ) + ] + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Models/LoginModel.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Models/LoginModel.swift" new file mode 100644 index 0000000..3c73306 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Models/LoginModel.swift" @@ -0,0 +1,29 @@ +import Foundation + +struct LoginModel { + var id: String + var pwd: String + + init(id: String = "", pwd: String = "") { + self.id = id + self.pwd = pwd + } + + // UserDefaults로 아이디 비번 저장 + public func saveToUserDefaults() { + UserDefaults.standard.set(id, forKey: "userId") + UserDefaults.standard.set(pwd, forKey: "userPwd") + } + + // 회원 아이디, 비밀번호 불러오기 + //아이디, 비밀번호 반환 + static func loadFromUserDefaults() -> LoginModel? { + guard + let id = UserDefaults.standard.string(forKey: "userId"), + let pwd = UserDefaults.standard.string(forKey: "userPwd") + else { + return nil + } + return LoginModel(id: id, pwd: pwd) + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/SceneDelegate.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/SceneDelegate.swift" new file mode 100644 index 0000000..662a90c --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/SceneDelegate.swift" @@ -0,0 +1,53 @@ +// +// SceneDelegate.swift +// UMCKream +// +// Created by 한태빈 on 9/30/24. +// + + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + guard let windowScene = (scene as? UIWindowScene) else { return } + + window = UIWindow(windowScene: windowScene) + let loginVC = LoginViewController() + window?.rootViewController = loginVC + window?.makeKeyAndVisible() + } +} + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + + diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/HomeViewController.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/HomeViewController.swift" new file mode 100644 index 0000000..68e437d --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/HomeViewController.swift" @@ -0,0 +1,101 @@ +import UIKit + +class HomeViewController: UIViewController, UICollectionViewDelegate { + private let rootView = Homeview() + + override func viewDidLoad() { + super.viewDidLoad() + + view = rootView + setupAction() + setupDelegate() + } + + private func setupAction() { + rootView.segmentedControl.addTarget( + self, + action: #selector(segmentedControlValueChanged(segment:)), + for: .valueChanged + ) + } + + private func setupDelegate() { + rootView.HomeCollectionView.dataSource = self + rootView.HomeCollectionView.delegate = self + rootView.JustDroppedCollectionView.dataSource = self + rootView.JustDroppedCollectionView.delegate = self + } + + @objc + private func segmentedControlValueChanged(segment: UISegmentedControl) { + if segment.selectedSegmentIndex == 0 { + rootView.HomeCollectionView.isHidden = false + rootView.JustDroppedCollectionView.isHidden = false + rootView.emptyLabel.isHidden = true + } else { + rootView.HomeCollectionView.isHidden = true + rootView.JustDroppedCollectionView.isHidden = true + rootView.emptyLabel.isHidden = false + } + } +} + +extension HomeViewController: UICollectionViewDataSource { + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + if collectionView == rootView.HomeCollectionView { + return HomeModel.Makedummy().count + } else if collectionView == rootView.JustDroppedCollectionView { + return JustDroppedModel.MakeDummy2().count + } + return 0 + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + if collectionView == rootView.HomeCollectionView { + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: HomeCollectionViewCell.identifier, + for: indexPath + ) as? HomeCollectionViewCell else { + return UICollectionViewCell() + } + let list = HomeModel.Makedummy() + cell.imageView.image = list[indexPath.row].image + cell.titleLabel.text = list[indexPath.row].name + return cell + + } else if collectionView == rootView.JustDroppedCollectionView { + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: JustDroppedCollectionViewCell.identifier, + for: indexPath + ) as? JustDroppedCollectionViewCell else { + return UICollectionViewCell() + } + let list = JustDroppedModel.MakeDummy2() + cell.imageView.image = list[indexPath.row].image + cell.titleLabel.text = list[indexPath.row].transactionCount + cell.brandLabel.text = list[indexPath.row].brandName + cell.productLabel.text = list[indexPath.row].productName + cell.priceLabel.text = list[indexPath.row].price + cell.nowBuyingLabel.text = list[indexPath.row].buyNowLabel + cell.saveButton.setImage( + UIImage(systemName: list[indexPath.row].isBookmarked ? "bookmark.fill" : "bookmark"), + for: .normal + ) + return cell + } + return UICollectionViewCell() + } +} + + +extension HomeViewController { + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + // JustDroppedCollectionView에서 셀이 클릭되었는지 확인 + if collectionView == rootView.JustDroppedCollectionView { + // ProductViewController로 이동 + let productViewController = ProductViewController() + + navigationController?.pushViewController(productViewController, animated: true) + } + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/LoginViewController.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/LoginViewController.swift" new file mode 100644 index 0000000..bb90629 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/LoginViewController.swift" @@ -0,0 +1,42 @@ +import UIKit + +class LoginViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + self.view = loginView + } + + private lazy var loginView: LoginView = { + let view = LoginView() + // 버튼 액션 추가 + view.loginButton.addTarget(self, action: #selector(loginButtonTapped), for: .touchUpInside) + view.kakaoLoginButton.addTarget(self, action: #selector(kakaoLoginButtonTapped), for: .touchUpInside) + view.appleLoginButton.addTarget(self, action: #selector(appleLoginButtonTapped), for: .touchUpInside) + return view + }() + + // 로그인 버튼 눌렀을 때 탭바로 이동 + @objc func loginButtonTapped() { + print("로그인 버튼 눌림") + let tabBarVC = TabarViewController() + tabBarVC.modalPresentationStyle = .fullScreen + present(tabBarVC, animated: true) + } + + // 카카오 로그인 버튼 액션 + @objc func kakaoLoginButtonTapped() { + print("카카오로 로그인 버튼 눌림") + let tabBarVC = TabarViewController() + tabBarVC.modalPresentationStyle = .fullScreen + present(tabBarVC, animated: true) + } + + // 애플 로그인 버튼 액션 + @objc func appleLoginButtonTapped() { + print("애플로 로그인 버튼 눌림") + let tabBarVC = TabarViewController() + tabBarVC.modalPresentationStyle = .fullScreen + present(tabBarVC, animated: true) + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/MyPageManageViewController.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/MyPageManageViewController.swift" new file mode 100644 index 0000000..fca6553 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/MyPageManageViewController.swift" @@ -0,0 +1,43 @@ +import UIKit + +/// 프로필 관리 페이지 뷰 컨트롤러 +class MyPageManageViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + self.view = manageProfilePageView + setNavigation() + } + + // lazy로 관리되는 커스텀 뷰, 버튼 액션을 연결함 + private lazy var manageProfilePageView: ManageProfilePageView = { + let view = ManageProfilePageView() + view.changeButton.addTarget(self, action: #selector(changeButtonTapped), for: .touchUpInside) + view.changeButton2.addTarget(self, action: #selector(changeButton2Tapped), for: .touchUpInside) + return view + }() + + // 네비게이션 설정 + private func setNavigation() { + self.navigationItem.title = "프로필 관리" + + let backBtn = UIBarButtonItem(image: UIImage(systemName: "arrow.left")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(backButtonTapped)) + navigationItem.leftBarButtonItem = backBtn + } + + /// 네비게이션 왼쪽 상단 버튼 액션 + @objc func backButtonTapped() { + navigationController?.popViewController(animated: true) + } + + @objc func changeButtonTapped() { + // ChangeButton1 눌렸을 때의 동작 + print("ChangeButton 눌림") + } + + @objc func changeButton2Tapped() { + // ChangeButton2 눌렸을 때의 동작 + print("ChangeButton2 눌림") + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/MyPageViewController.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/MyPageViewController.swift" new file mode 100644 index 0000000..7369195 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/MyPageViewController.swift" @@ -0,0 +1,24 @@ +import UIKit + +/// 마이 페이지 뷰 컨트롤러 +class MyPageViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + self.view = myPageView + } + + /// 커스텀한 마이페이지 뷰 + private lazy var myPageView: MyPageView = { + let view = MyPageView() + view.manageButton.addTarget(self, action: #selector(ManageButtonTapped), for: .touchUpInside) + return view + }() + + /// 프로필 관리 버튼을 통해 프로필 수정 페이지 이동 + @objc func ManageButtonTapped() { + let changeVC = MyPageManageViewController() + navigationController?.pushViewController(changeVC, animated: true) + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/ProductViewController.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/ProductViewController.swift" new file mode 100644 index 0000000..e48da9c --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/ProductViewController.swift" @@ -0,0 +1,47 @@ +// +// ProductViewController.swift +// KREAM +// +// Created by 한태빈 on 11/9/24. +// + +import UIKit + +class ProductViewController: UIViewController, UICollectionViewDataSource { + private let images: [UIImage] = [ + UIImage(named: "matinkimblue")!, + UIImage(named: "matinkimpurple")!, + UIImage(named: "matinkimgreen")!, + UIImage(named: "matinkimburgundy")!, + UIImage(named: "matinkimcherry")!, + UIImage(named: "matinkimbrown")!, + UIImage(named: "matinkimlast")! + ] + + private let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout()) + + //ProductViewController랑 ProductView 연결 + private let rootView = ProductView() + + override func loadView() { + self.view = rootView + collectionView.dataSource = self + collectionView.register(MatinKimCollectionViewCell.self, forCellWithReuseIdentifier: MatinKimCollectionViewCell.identifier) + view.addSubview(collectionView) + + collectionView.frame = view.bounds + } + + + // UICollectionViewDataSource 메서드 + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return images.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MatinKimCollectionViewCell.identifier, for: indexPath) as! MatinKimCollectionViewCell + cell.imageView.image = images[indexPath.item] + return cell + } +} + diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/SavedViewController.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/SavedViewController.swift" new file mode 100644 index 0000000..665b254 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/SavedViewController.swift" @@ -0,0 +1,17 @@ +// +// SavedViewController.swift +// UMCKream +// +// Created by 한태빈 on 10/6/24. +// + +import UIKit + +class SavedViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/ShophViewController.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/ShophViewController.swift" new file mode 100644 index 0000000..8a9d7c7 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/ShophViewController.swift" @@ -0,0 +1,16 @@ +// +// ShophViewController.swift +// UMCKream +// +// Created by 한태빈 on 10/6/24. +// + +import UIKit + +class ShopViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/StyleViewController.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/StyleViewController.swift" new file mode 100644 index 0000000..12f5c01 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/StyleViewController.swift" @@ -0,0 +1,17 @@ +// +// StyleViewController.swift +// UMCKream +// +// Created by 한태빈 on 10/6/24. +// + +import UIKit + +class StyleViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/TabarViewController.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/TabarViewController.swift" new file mode 100644 index 0000000..1876876 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/ViewControllers/TabarViewController.swift" @@ -0,0 +1,53 @@ +import UIKit + +// UIImage 확장: 이미지를 크기에 맞게 리사이즈하는 메서드 추가 +extension UIImage { + func resize(to size: CGSize) -> UIImage? { + UIGraphicsBeginImageContextWithOptions(size, false, 0.0) + self.draw(in: CGRect(origin: .zero, size: size)) + let resizedImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + return resizedImage + } +} + +class TabarViewController: UITabBarController { + + override func viewDidLoad() { + super.viewDidLoad() + + let HomeVC = UINavigationController(rootViewController: HomeViewController()) + let homeImage = UIImage(named: "home")?.resize(to: CGSize(width: 26, height: 26)) + HomeVC.tabBarItem = UITabBarItem(title: "HOME", image: homeImage, tag: 0) + + let StyleVC = UINavigationController(rootViewController: StyleViewController()) + let styleImage = UIImage(named: "style")?.resize(to: CGSize(width: 27, height: 26)) + StyleVC.tabBarItem = UITabBarItem(title: "STYLE", image: styleImage, tag: 1) + + let ShopVC = UINavigationController(rootViewController: ShopViewController()) + let shopImage = UIImage(named: "shop")?.resize(to: CGSize(width: 31, height: 31)) + ShopVC.tabBarItem = UITabBarItem(title: "SHOP", image: shopImage, tag: 2) + + let SavedVC = UINavigationController(rootViewController: SavedViewController()) + let savedImage = UIImage(named: "saved")?.resize(to: CGSize(width: 28, height: 26)) + SavedVC.tabBarItem = UITabBarItem(title: "SAVED", image: savedImage, tag: 3) + + let MyVC = UINavigationController(rootViewController: MyPageViewController()) + let myImage = UIImage(named: "my")?.resize(to: CGSize(width: 29, height: 26)) + MyVC.tabBarItem = UITabBarItem(title: "MY", image: myImage, tag: 4) + + self.viewControllers = [HomeVC, StyleVC, ShopVC, SavedVC, MyVC] + appearance() + } + + private func appearance() { + let tabarAppearance = UITabBarAppearance() + tabarAppearance.stackedLayoutAppearance.selected.iconColor = UIColor.black + tabarAppearance.stackedLayoutAppearance.selected.titleTextAttributes = [.foregroundColor: UIColor.black] + tabarAppearance.stackedLayoutAppearance.selected.badgeBackgroundColor = UIColor.black + tabarAppearance.stackedLayoutAppearance.normal.badgeBackgroundColor = UIColor.black + + self.tabBar.standardAppearance = tabarAppearance + self.tabBar.backgroundColor = .white + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/HomeView.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/HomeView.swift" new file mode 100644 index 0000000..6f13f5d --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/HomeView.swift" @@ -0,0 +1,233 @@ +import UIKit +import Then +import SnapKit + +class Homeview: UIView { + + // ScrollView + private lazy var scrollView: UIScrollView = { + let scrollView = UIScrollView() + scrollView.showsVerticalScrollIndicator = true + scrollView.showsHorizontalScrollIndicator = false + return scrollView + }() + + //contentView + private let contentView = UIView() + + private let searchBar = UILabel().then { + $0.text = " 브랜드, 상품, 프로필, 태그 등" + $0.font = UIFont(name: "Pretendard", size: 13.5) + $0.textColor = .lightGray + $0.backgroundColor = UIColor.systemGray5 + $0.layer.cornerRadius = 12 + $0.clipsToBounds = true + } + + private let AlarmImageView = UIImageView().then { + $0.image = UIImage(named: "alarm") + $0.contentMode = .scaleAspectFit + $0.snp.makeConstraints { make in + make.height.equalTo(19.5) + make.width.equalTo(18) + } + } + + let segmentedControl = UISegmentedControl(items: ["추천", "랭킹", "발매정보", "럭셔리", "남성", "여성"]).then { + $0.setBackgroundImage(UIImage(), for: .normal, barMetrics: .default) + $0.setBackgroundImage(UIImage(), for: .selected, barMetrics: .default) + $0.setBackgroundImage(UIImage(), for: .highlighted, barMetrics: .default) + + $0.setDividerImage(UIImage(), forLeftSegmentState: .selected, rightSegmentState: .normal, barMetrics: .default) + $0.selectedSegmentIndex = 0 + $0.setTitleTextAttributes( + [ + NSAttributedString.Key.foregroundColor: UIColor.black, + .font: UIFont.systemFont(ofSize: 16, weight: .light) + ], + for: .normal + ) + $0.setTitleTextAttributes( + [ + NSAttributedString.Key.foregroundColor: UIColor.black, + .font: UIFont.systemFont(ofSize: 16, weight: .bold) + ], + for: .selected + ) + } + + let HomeCollectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout().then { + $0.estimatedItemSize = .init(width: 61, height: 81) + $0.minimumInteritemSpacing = 9 //? + $0.minimumLineSpacing = 20 + }).then { + $0.backgroundColor = .clear + $0.isScrollEnabled = false + $0.register(HomeCollectionViewCell.self, forCellWithReuseIdentifier: HomeCollectionViewCell.identifier) + } + + private let JustDroppedLabel = UILabel().then { + $0.text = "Just Dropped" + $0.font = .systemFont(ofSize: 16, weight: .semibold) + $0.textColor = .black + } + + private let releaseLabel = UILabel().then { + $0.text = "발매 상품" + $0.font = .systemFont(ofSize: 13, weight: .light) + $0.textColor = UIColor(red: 162/255, green: 162/255, blue: 162/255, alpha: 1.0) + } + + let JustDroppedCollectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout().then { + $0.estimatedItemSize = CGSize(width: 142, height: 237) + $0.minimumInteritemSpacing = 8 + $0.scrollDirection = .horizontal + }).then { + $0.backgroundColor = .clear + $0.isScrollEnabled = true + $0.register(JustDroppedCollectionViewCell.self, forCellWithReuseIdentifier: JustDroppedCollectionViewCell.identifier) + } + + private let divideLine1 = UIView().then { + $0.backgroundColor = .black + } + + private let divideLine2 = UIView().then { + $0.backgroundColor = UIColor(red: 242/255, green: 242/255, blue: 242/255, alpha: 1.0) + } + + private let divideLine3 = UIView().then { + $0.backgroundColor = UIColor(red: 242/255, green: 242/255, blue: 242/255, alpha: 1.0) + } + + private let advertisement = UIImageView().then { + $0.image = UIImage(named: "ad") + $0.contentMode = .scaleAspectFit + } + + let emptyLabel = UILabel().then { + $0.font = .systemFont(ofSize: 24, weight: .medium) + $0.textColor = .black + $0.text = "아직 개발 중.." + $0.isHidden = true + } + + override init(frame: CGRect) { + super.init(frame: frame) + backgroundColor = .white + setupView() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupView() { + // ScrollView와 ContentView를 추가하여 스크롤 가능하도록 설정 + addSubview(scrollView) + scrollView.addSubview(contentView) + + scrollView.snp.makeConstraints { make in + make.edges.equalTo(safeAreaLayoutGuide) + } + + contentView.snp.makeConstraints { make in + make.edges.equalToSuperview() + make.width.equalToSuperview() // 스크롤 방향을 세로로 고정 + } + + // ContentView에 기존 UI 요소를 모두 추가 + [ + searchBar, + AlarmImageView, + segmentedControl, + divideLine1, + advertisement, + HomeCollectionView, + divideLine2, + JustDroppedLabel, + releaseLabel, + JustDroppedCollectionView, + divideLine3, + emptyLabel + ].forEach { + contentView.addSubview($0) + } + + searchBar.snp.makeConstraints { + $0.top.equalToSuperview().offset(51) + $0.height.equalTo(40) + $0.width.equalTo(303) + $0.leading.equalToSuperview().offset(16) + } + + AlarmImageView.snp.makeConstraints { + $0.top.equalToSuperview().offset(59) + $0.leading.equalTo(searchBar.snp.trailing).offset(15) + } + + segmentedControl.snp.makeConstraints { + $0.top.equalTo(searchBar.snp.bottom).offset(16) + $0.leading.equalToSuperview().offset(24) + $0.trailing.equalToSuperview().offset(-25) + $0.height.equalTo(27) + } + + divideLine1.snp.makeConstraints { + $0.top.equalTo(segmentedControl.snp.bottom).offset(8) + $0.horizontalEdges.equalToSuperview() + $0.height.equalTo(1) + } + + advertisement.snp.makeConstraints { + $0.top.equalTo(divideLine1.snp.bottom).offset(0) + $0.horizontalEdges.equalToSuperview() + $0.height.equalTo(advertisement.snp.width).multipliedBy(336.0 / 374.0) + } + + HomeCollectionView.snp.makeConstraints { + $0.top.equalTo(advertisement.snp.bottom).offset(20) + $0.leading.equalToSuperview().offset(16) + $0.trailing.equalToSuperview().offset(-16) + $0.height.equalTo(182) + } + + divideLine2.snp.makeConstraints { + $0.top.equalTo(HomeCollectionView.snp.bottom).offset(0) + $0.horizontalEdges.equalToSuperview() + $0.height.equalTo(1) + } + + JustDroppedLabel.snp.makeConstraints { + $0.top.equalTo(divideLine2.snp.bottom).offset(20) + $0.leading.equalToSuperview().offset(16) + $0.height.equalTo(19) + } + + releaseLabel.snp.makeConstraints { + $0.top.equalTo(divideLine2.snp.bottom).offset(43) + $0.leading.equalToSuperview().offset(16) + $0.height.equalTo(16) + } + + JustDroppedCollectionView.snp.makeConstraints { + $0.top.equalTo(releaseLabel.snp.bottom).offset(14) + $0.leading.equalToSuperview().offset(16) + $0.trailing.equalToSuperview().offset(-16) + $0.height.equalTo(237) + } + + divideLine3.snp.makeConstraints { + $0.top.equalTo(JustDroppedCollectionView.snp.bottom).offset(30) + $0.horizontalEdges.equalToSuperview() + $0.height.equalTo(1) + $0.bottom.equalToSuperview().offset(-20) // 스크롤 가능하도록 마지막 요소의 하단을 contentView에 맞춤 + + } + + emptyLabel.snp.makeConstraints { + $0.top.equalTo(divideLine3.snp.bottom).offset(20) + $0.centerX.equalToSuperview() + } + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/LoginView.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/LoginView.swift" new file mode 100644 index 0000000..5adcb5a --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/LoginView.swift" @@ -0,0 +1,163 @@ +// +// LoginView.swift +// MyKream +// +// Created by 한태빈 on 9/28/24. +// + +import UIKit + +class LoginView: UIView { + // 초기화 메서드 + override init(frame: CGRect) { + super.init(frame: frame) + self.backgroundColor = .white + self.addComponents() + self.setupAutoLayout() + } + + // init(coder:)가 사용되지 않도록 처리 + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // UIImageView를 정의 (KREAM 로고) + private let logoImageView = UIImageView().then { + $0.contentMode = .scaleAspectFit + $0.image = UIImage(named: "Kream") + } + + // 이메일 라벨 + private let emailLabel = UILabel().then { + $0.text = "이메일 주소" + $0.font = UIFont(name: "Inter", size: 12) + $0.textColor = .black + } + + // 이메일 텍스트 필드 + private let emailTextField = UITextField().then { + $0.placeholder = "예) kream@kream.co.kr" + $0.borderStyle = .roundedRect + $0.font = UIFont.systemFont(ofSize: 14) + $0.layer.cornerRadius = 15 + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.lightGray.cgColor + } + + // 비밀번호 라벨 + private let passwordLabel = UILabel().then { + $0.text = "비밀번호" + $0.font = UIFont(name: "Inter", size: 12) + $0.textColor = .black + } + + // 비밀번호 텍스트 필드 + private let passwordTextField = UITextField().then { + $0.placeholder = "비밀번호를 입력해주세요" + $0.borderStyle = .roundedRect + $0.isSecureTextEntry = true + $0.font = UIFont.systemFont(ofSize: 14) + $0.layer.cornerRadius = 15 + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.lightGray.cgColor + } + + // 로그인 버튼 + let loginButton = UIButton(type: .system).then { + $0.setTitle("로그인", for: .normal) + $0.titleLabel?.font = UIFont(name: "Inter", size: 14) + $0.backgroundColor = UIColor(red: 217/255, green: 217/255, blue: 217/255, alpha: 1) + $0.setTitleColor(.white, for: .normal) + $0.layer.cornerRadius = 8 + } + + // 소셜 로그인 버튼 (카카오톡) + let kakaoLoginButton = UIButton(type: .system).then { + $0.setTitle("카카오로 로그인", for: .normal) + $0.titleLabel?.font = UIFont(name: "Inter", size: 13) + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.gray.cgColor + $0.layer.cornerRadius = 10 + } + + // 소셜 로그인 버튼 (Apple) + let appleLoginButton = UIButton(type: .system).then { + $0.setTitle("Apple로 로그인", for: .normal) + $0.titleLabel?.font = UIFont(name: "Inter", size: 13) + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.gray.cgColor + $0.layer.cornerRadius = 10 + } + + // UI 요소들을 뷰에 추가하는 메서드 + private func addComponents() { + [logoImageView, emailLabel, emailTextField, passwordLabel, passwordTextField, loginButton, kakaoLoginButton, appleLoginButton].forEach { + self.addSubview($0) + } + } + + // AutoLayout 설정 메서드 + private func setupAutoLayout() { + logoImageView.snp.makeConstraints { + $0.top.equalTo(self.safeAreaLayoutGuide).offset(126) + $0.left.equalToSuperview().offset(53) + $0.right.equalToSuperview().inset(53) + $0.width.equalTo(287) + $0.height.equalTo(75) + } + + emailLabel.snp.makeConstraints { + $0.width.equalTo(303) + $0.height.equalTo(15) + $0.left.equalToSuperview().offset(45) + $0.top.equalTo(logoImageView.snp.bottom).offset(87) + } + + emailTextField.snp.makeConstraints { + $0.width.equalTo(303) + $0.height.equalTo(34) + $0.top.equalTo(emailLabel.snp.bottom).offset(8) + $0.left.equalToSuperview().offset(45) + $0.right.equalToSuperview().inset(45) + } + + passwordLabel.snp.makeConstraints { + $0.width.equalTo(303) + $0.height.equalTo(15) + $0.top.equalTo(emailTextField.snp.bottom).offset(17) + $0.left.equalToSuperview().offset(45) + } + + passwordTextField.snp.makeConstraints { + $0.width.equalTo(303) + $0.height.equalTo(34) + $0.top.equalTo(passwordLabel.snp.bottom).offset(8) + $0.left.equalToSuperview().offset(45) + $0.right.equalToSuperview().inset(45) + } + + loginButton.snp.makeConstraints { + $0.top.equalTo(passwordTextField.snp.bottom).offset(17) + $0.left.equalToSuperview().offset(45) + $0.right.equalToSuperview().inset(45) + $0.height.equalTo(38) + } + + kakaoLoginButton.snp.makeConstraints { + $0.top.equalTo(loginButton.snp.bottom).offset(87) + $0.left.equalToSuperview().offset(47.5) + $0.right.equalToSuperview().inset(47.5) + $0.width.equalTo(298) + $0.height.equalTo(40) + } + + appleLoginButton.snp.makeConstraints { + $0.top.equalTo(kakaoLoginButton.snp.bottom).offset(22) + $0.left.equalToSuperview().offset(47.5) + $0.right.equalToSuperview().inset(47.5) + $0.width.equalTo(298) + $0.height.equalTo(40) + } + } +} + diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/ManageProfilePageView.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/ManageProfilePageView.swift" new file mode 100644 index 0000000..f39f204 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/ManageProfilePageView.swift" @@ -0,0 +1,133 @@ +import UIKit + +class ManageProfilePageView: UIView { + + override init(frame: CGRect) { + super.init(frame: frame) + self.backgroundColor = .white + self.addComponents() + self.setupConstraints() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private let profileImageView = UIImageView().then { + $0.image = UIImage(named: "profile") + $0.contentMode = .scaleAspectFit + } + + private let profileInfo = UILabel().then { + $0.text = "프로필 정보" + $0.font = UIFont(name: "Pretendard", size: 18) + $0.textColor = .black + } + + private let userEmail = UILabel().then { + $0.text = "유저 이메일" + $0.font = UIFont(name: "Pretendard", size: 14) + $0.textColor = .black + } + + private let userEmailTextField = UITextField().then { + $0.placeholder = "taebin325@gmail.com" + $0.borderStyle = .roundedRect + $0.font = UIFont(name: "Pretendard", size: 14) + $0.textColor = .black + $0.layer.cornerRadius = 10 + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.lightGray.cgColor + } + + private let userPw = UILabel().then { + $0.text = "유저 비밀번호" + $0.font = UIFont(name: "Pretendard", size: 14) + $0.textColor = .black + } + + private let userPwTextField = UITextField().then { + $0.placeholder = "qpalzm()" + $0.borderStyle = .roundedRect + $0.font = UIFont(name: "Pretendard", size: 14) + $0.textColor = .black + $0.layer.cornerRadius = 10 + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.lightGray.cgColor + } + + // 변경 버튼을 프로퍼티로 정의 (internal로 설정하여 ViewController에서 접근 가능) + let changeButton = UIButton(type: .system).then { + $0.setTitle("변경", for: .normal) + $0.titleLabel?.font = UIFont(name: "Pretendard", size: 14) + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.black.cgColor + $0.layer.cornerRadius = 6 + } + + let changeButton2 = UIButton(type: .system).then { + $0.setTitle("변경", for: .normal) + $0.titleLabel?.font = UIFont(name: "Pretendard", size: 14) + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.black.cgColor + $0.layer.cornerRadius = 6 + } + + private func addComponents() { + [profileImageView, profileInfo, userEmail, userEmailTextField, userPw, userPwTextField, changeButton, changeButton2].forEach { + self.addSubview($0) + } + } + + private func setupConstraints() { + profileImageView.snp.makeConstraints { make in + make.height.width.equalTo(90) + make.top.equalToSuperview().offset(144) + make.leading.equalToSuperview().offset(151) + } + + profileInfo.snp.makeConstraints { make in + make.top.equalTo(profileImageView.snp.bottom).offset(20) + make.leading.equalToSuperview().offset(27) + } + + userEmail.snp.makeConstraints { make in + make.top.equalTo(profileInfo.snp.bottom).offset(23) + make.leading.equalToSuperview().offset(27) + } + + userEmailTextField.snp.makeConstraints { make in + make.height.equalTo(32) + make.width.equalTo(282) + make.leading.equalToSuperview().offset(27) + make.top.equalTo(userEmail.snp.bottom).offset(4) + } + + userPw.snp.makeConstraints { make in + make.top.equalTo(userEmailTextField.snp.bottom).offset(23) + make.leading.equalToSuperview().offset(27) + } + + userPwTextField.snp.makeConstraints { make in + make.height.equalTo(32) + make.width.equalTo(282) + make.leading.equalToSuperview().offset(27) + make.top.equalTo(userPw.snp.bottom).offset(4) + } + + changeButton.snp.makeConstraints { make in + make.height.equalTo(32) + make.width.equalTo(58) + make.leading.equalTo(userEmailTextField.snp.trailing).offset(9) + make.top.equalTo(userEmailTextField.snp.top) + } + + changeButton2.snp.makeConstraints { make in + make.height.equalTo(32) + make.width.equalTo(58) + make.leading.equalTo(userPwTextField.snp.trailing).offset(9) + make.top.equalTo(userPwTextField.snp.top) + } + } +} + diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/MyPageView.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/MyPageView.swift" new file mode 100644 index 0000000..abdf19d --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/MyPageView.swift" @@ -0,0 +1,133 @@ +import UIKit + + +class MyPageView: UIView { + + override init(frame: CGRect) { + super.init(frame: frame) + self.backgroundColor = .white + self.addComponents() + self.setupConstraints() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // SettingImageView + private let settingImageView = UIImageView().then { + $0.image = UIImage(named: "setting") + $0.contentMode = .scaleAspectFit + } + + // CameraImageView + private let cameraImageView = UIImageView().then { + $0.image = UIImage(named: "camera") + $0.contentMode = .scaleAspectFit + } + + // ProfileImageView + private let profileImageView = UIImageView().then { + $0.image = UIImage(named: "profile") + $0.contentMode = .scaleAspectFit + } + + // ProfileName Label + private let profileName = UILabel().then { + $0.text = "Xoqls_iOS" + $0.font = UIFont(name: "Pretendard", size: 16) + $0.textColor = .black + } + + // FollowerCount Label + private let followerCount = UILabel().then { + $0.text = "팔로워 489" + $0.font = UIFont(name: "Pretendard", size: 12) + $0.textColor = .black + } + + // FollowingCount Label + private let followingCount = UILabel().then { + $0.text = "팔로잉 486" + $0.font = UIFont(name: "Pretendard", size: 12) + $0.textColor = .black + } + + // ManageButton + let manageButton = UIButton(type: .system).then { + $0.setTitle("프로필 관리", for: .normal) + $0.titleLabel?.font = UIFont(name: "Pretendard", size: 9) + $0.setTitleColor(.black, for: .normal) + $0.layer.borderWidth = 0.8 + $0.layer.borderColor = UIColor.gray.cgColor + $0.layer.cornerRadius = 8 + } + + // ShareButton + private let shareButton = UIButton(type: .system).then { + $0.setTitle("프로필 공유", for: .normal) + $0.titleLabel?.font = UIFont(name: "Pretendard", size: 9) + $0.setTitleColor(.black, for: .normal) + $0.layer.borderWidth = 0.8 + $0.layer.borderColor = UIColor.gray.cgColor + $0.layer.cornerRadius = 8 + } + + // Add components to view + private func addComponents() { + [settingImageView, cameraImageView, profileImageView, profileName, followerCount, followingCount, manageButton, shareButton].forEach { + self.addSubview($0) + } + } + + // Setup constraints + private func setupConstraints() { + settingImageView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(75) + make.leading.equalToSuperview().offset(32.5) + make.height.width.equalTo(25) + } + + cameraImageView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(75) + make.trailing.equalToSuperview().inset(32.5) + make.height.width.equalTo(25) + } + + profileImageView.snp.makeConstraints { make in + make.height.width.equalTo(90) + make.top.equalToSuperview().offset(126) + make.leading.equalToSuperview().offset(32.5) + } + + profileName.snp.makeConstraints { make in + make.leading.equalTo(profileImageView.snp.trailing).offset(16) + make.top.equalToSuperview().offset(147) + } + + followerCount.snp.makeConstraints { make in + make.leading.equalTo(profileImageView.snp.trailing).offset(16) + make.top.equalTo(profileName.snp.bottom).offset(6) + } + + followingCount.snp.makeConstraints { make in + make.leading.equalTo(followerCount.snp.trailing).offset(8) + make.top.equalTo(profileName.snp.bottom).offset(6) + } + + manageButton.snp.makeConstraints { make in + make.top.equalToSuperview().offset(242) + make.leading.equalToSuperview().offset(32.5) + make.width.equalTo(157) + make.height.equalTo(26) + } + + shareButton.snp.makeConstraints { make in + make.top.equalToSuperview().offset(242) + make.leading.equalTo(manageButton.snp.trailing).offset(14) + make.width.equalTo(157) + make.height.equalTo(26) + } + } +} + diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/ProductView.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/ProductView.swift" new file mode 100644 index 0000000..b4f79f8 --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/ProductView.swift" @@ -0,0 +1,117 @@ +import UIKit +import SnapKit + +class ProductView: UIView { + + private let mainproductImageView = UIImageView().then { + $0.image = UIImage(named: "matinkimblack") + $0.contentMode = .scaleAspectFit + } + + let MatinKimCollectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout().then { + $0.estimatedItemSize = .init(width: 53, height: 53) + $0.minimumInteritemSpacing = 8 + $0.scrollDirection = .horizontal + }).then { + $0.backgroundColor = .clear + $0.isScrollEnabled = true + $0.register(JustDroppedCollectionViewCell.self, forCellWithReuseIdentifier: JustDroppedCollectionViewCell.identifier) + } + + private let buynowprice = UILabel().then { + $0.text = "즉시 구매가" + $0.font = .systemFont(ofSize: 12, weight: .light) + $0.textColor = .black + } + + private let productprice = UILabel().then { + $0.text = "228,000원" + $0.font = .systemFont(ofSize: 20, weight: .semibold) + $0.textColor = .black + } + + private let productname = UILabel().then { + $0.text = "Matin Kim Logo Coating Jumper" + $0.font = .systemFont(ofSize: 16, weight: .regular) + $0.textColor = .black + } + + private let productkname = UILabel().then { + $0.text = "마땡킴 로고 코팅 점퍼 블랙" + $0.font = .systemFont(ofSize: 12, weight: .regular) + $0.textColor = UIColor(red: 162/255, green: 162/255, blue: 162/255, alpha: 1.0) + } + + private let divideLine = UIView().then { + $0.backgroundColor = .black + } + + // 초기화 메서드 + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + setupLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupView() { + // 모든 UI 요소를 뷰에 추가 + addSubview(mainproductImageView) + addSubview(MatinKimCollectionView) + addSubview(productname) + addSubview(productkname) + addSubview(buynowprice) + addSubview(productprice) + addSubview(divideLine) + } + + private func setupLayout() { + // mainproductImageView 레이아웃 + mainproductImageView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(48) + make.horizontalEdges.equalToSuperview() + make.height.equalTo(373) + make.width.equalTo(374) + } + + // MatinKimCollectionView 레이아웃 + MatinKimCollectionView.snp.makeConstraints { make in + make.top.equalTo(mainproductImageView.snp.bottom).offset(20) + make.leading.trailing.equalToSuperview() + make.height.equalTo(53) + } + + // buynowprice 레이아웃 + buynowprice.snp.makeConstraints { make in + make.top.equalTo(MatinKimCollectionView.snp.bottom).offset(23) + make.leading.equalToSuperview().inset(16) + } + + // productprice 레이아웃 + productprice.snp.makeConstraints { make in + make.top.equalTo(buynowprice.snp.bottom).offset(4) + make.leading.equalToSuperview().inset(16) + } + + // productname 레이아웃 + productname.snp.makeConstraints { make in + make.top.equalTo(productprice.snp.bottom).offset(18) + make.leading.trailing.equalToSuperview().inset(16) + } + + // productkname 레이아웃 + productkname.snp.makeConstraints { make in + make.top.equalTo(productname.snp.bottom).offset(6) + make.leading.trailing.equalToSuperview().inset(16) + } + + // divideLine 레이아웃 + divideLine.snp.makeConstraints { make in + make.top.equalTo(productkname.snp.bottom).offset(54) + make.height.equalTo(1) + } + } +} diff --git "a/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/SizeView.swift" "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/SizeView.swift" new file mode 100644 index 0000000..66cdc0d --- /dev/null +++ "b/week7/KREAM \353\263\265\354\202\254\353\263\270/Views/SizeView.swift" @@ -0,0 +1,20 @@ +// +// SizeView.swift +// KREAM +// +// Created by 한태빈 on 11/8/24. +// + +import UIKit + +class SizeView: UIView { + + /* + // Only override draw() if you perform custom drawing. + // An empty implementation adversely affects performance during animation. + override func draw(_ rect: CGRect) { + // Drawing code + } + */ + +}