From 870c8f096233d135abb3063890fb6956c6fd9dc9 Mon Sep 17 00:00:00 2001 From: saint Date: Mon, 3 Oct 2022 16:52:18 +0900 Subject: [PATCH 1/7] =?UTF-8?q?1=EC=B0=A8=20=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- .../project.pbxproj | 58 +++++++------ .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../first_assignment}/AppDelegate.swift | 0 .../AccentColor.colorset/Contents.json | 0 .../AppIcon.appiconset/Contents.json | 0 .../Assets.xcassets/Contents.json | 0 .../Base.lproj/LaunchScreen.storyboard | 0 .../Base.lproj/Main.storyboard | 0 .../first_assignment/CheckAccount.swift | 4 +- .../first_assignment}/Info.plist | 2 - .../first_assignment/KakaoCustomView.swift | 38 +++++++++ .../first_assignment/LoginMenu.swift | 84 +++++++++++++++++++ .../first_assignment/NewAccount.swift | 0 .../first_assignment}/SceneDelegate.swift | 25 ++++-- 16 files changed, 177 insertions(+), 38 deletions(-) rename {first assignment/first assignment.xcodeproj => first_assignment/first_assignment.xcodeproj}/project.pbxproj (82%) rename {first assignment/first assignment.xcodeproj => first_assignment/first_assignment.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (100%) rename {first assignment/first assignment.xcodeproj => first_assignment/first_assignment.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {first assignment/first assignment => first_assignment/first_assignment}/AppDelegate.swift (100%) rename {first assignment/first assignment => first_assignment/first_assignment}/Assets.xcassets/AccentColor.colorset/Contents.json (100%) rename {first assignment/first assignment => first_assignment/first_assignment}/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {first assignment/first assignment => first_assignment/first_assignment}/Assets.xcassets/Contents.json (100%) rename {first assignment/first assignment => first_assignment/first_assignment}/Base.lproj/LaunchScreen.storyboard (100%) rename {first assignment/first assignment => first_assignment/first_assignment}/Base.lproj/Main.storyboard (100%) rename first assignment/first assignment/MainAccount.swift => first_assignment/first_assignment/CheckAccount.swift (60%) rename {first assignment/first assignment => first_assignment/first_assignment}/Info.plist (90%) create mode 100644 first_assignment/first_assignment/KakaoCustomView.swift create mode 100644 first_assignment/first_assignment/LoginMenu.swift rename first assignment/first assignment/ViewController.swift => first_assignment/first_assignment/NewAccount.swift (100%) rename {first assignment/first assignment => first_assignment/first_assignment}/SceneDelegate.swift (66%) diff --git a/README.md b/README.md index f9bca75..45661d3 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -# NOHHANSOL +# BaeSungho ![gitbanner_hansol](https://tva1.sinaimg.cn/large/e6c9d24egy1h6m86nwttxj22aj0hiabx.jpg) -![curri](https://tva1.sinaimg.cn/large/e6c9d24egy1h6m8g413dwj21hc0u0dja.jpg) \ No newline at end of file +![curri](https://tva1.sinaimg.cn/large/e6c9d24egy1h6m8g413dwj21hc0u0dja.jpg) diff --git a/first assignment/first assignment.xcodeproj/project.pbxproj b/first_assignment/first_assignment.xcodeproj/project.pbxproj similarity index 82% rename from first assignment/first assignment.xcodeproj/project.pbxproj rename to first_assignment/first_assignment.xcodeproj/project.pbxproj index 4386dbb..705fc17 100644 --- a/first assignment/first assignment.xcodeproj/project.pbxproj +++ b/first_assignment/first_assignment.xcodeproj/project.pbxproj @@ -9,23 +9,27 @@ /* Begin PBXBuildFile section */ 85D0784728EAA8C80031A2AE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D0784628EAA8C80031A2AE /* AppDelegate.swift */; }; 85D0784928EAA8C80031A2AE /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D0784828EAA8C80031A2AE /* SceneDelegate.swift */; }; - 85D0784B28EAA8C80031A2AE /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D0784A28EAA8C80031A2AE /* ViewController.swift */; }; + 85D0784B28EAA8C80031A2AE /* NewAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D0784A28EAA8C80031A2AE /* NewAccount.swift */; }; 85D0784E28EAA8C80031A2AE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85D0784C28EAA8C80031A2AE /* Main.storyboard */; }; 85D0785028EAA8C90031A2AE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 85D0784F28EAA8C90031A2AE /* Assets.xcassets */; }; 85D0785328EAA8C90031A2AE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85D0785128EAA8C90031A2AE /* LaunchScreen.storyboard */; }; - 85D0785B28EAAA1D0031A2AE /* MainAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D0785A28EAAA1D0031A2AE /* MainAccount.swift */; }; + 85D0785B28EAAA1D0031A2AE /* LoginMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D0785A28EAAA1D0031A2AE /* LoginMenu.swift */; }; + 85D0785D28EAAF980031A2AE /* CheckAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D0785C28EAAF980031A2AE /* CheckAccount.swift */; }; + 85D0785F28EAC1600031A2AE /* KakaoCustomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D0785E28EAC1600031A2AE /* KakaoCustomView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 85D0784328EAA8C80031A2AE /* first assignment.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "first assignment.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 85D0784328EAA8C80031A2AE /* first_assignment.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = first_assignment.app; sourceTree = BUILT_PRODUCTS_DIR; }; 85D0784628EAA8C80031A2AE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 85D0784828EAA8C80031A2AE /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 85D0784A28EAA8C80031A2AE /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 85D0784A28EAA8C80031A2AE /* NewAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewAccount.swift; sourceTree = ""; }; 85D0784D28EAA8C80031A2AE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 85D0784F28EAA8C90031A2AE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 85D0785228EAA8C90031A2AE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 85D0785428EAA8C90031A2AE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 85D0785A28EAAA1D0031A2AE /* MainAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainAccount.swift; sourceTree = ""; }; + 85D0785A28EAAA1D0031A2AE /* LoginMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginMenu.swift; sourceTree = ""; }; + 85D0785C28EAAF980031A2AE /* CheckAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckAccount.swift; sourceTree = ""; }; + 85D0785E28EAC1600031A2AE /* KakaoCustomView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KakaoCustomView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -42,7 +46,7 @@ 85D0783A28EAA8C80031A2AE = { isa = PBXGroup; children = ( - 85D0784528EAA8C80031A2AE /* first assignment */, + 85D0784528EAA8C80031A2AE /* first_assignment */, 85D0784428EAA8C80031A2AE /* Products */, ); sourceTree = ""; @@ -50,32 +54,34 @@ 85D0784428EAA8C80031A2AE /* Products */ = { isa = PBXGroup; children = ( - 85D0784328EAA8C80031A2AE /* first assignment.app */, + 85D0784328EAA8C80031A2AE /* first_assignment.app */, ); name = Products; sourceTree = ""; }; - 85D0784528EAA8C80031A2AE /* first assignment */ = { + 85D0784528EAA8C80031A2AE /* first_assignment */ = { isa = PBXGroup; children = ( 85D0784628EAA8C80031A2AE /* AppDelegate.swift */, 85D0784828EAA8C80031A2AE /* SceneDelegate.swift */, - 85D0784A28EAA8C80031A2AE /* ViewController.swift */, - 85D0785A28EAAA1D0031A2AE /* MainAccount.swift */, + 85D0785A28EAAA1D0031A2AE /* LoginMenu.swift */, + 85D0784A28EAA8C80031A2AE /* NewAccount.swift */, + 85D0785C28EAAF980031A2AE /* CheckAccount.swift */, + 85D0785E28EAC1600031A2AE /* KakaoCustomView.swift */, 85D0784C28EAA8C80031A2AE /* Main.storyboard */, 85D0784F28EAA8C90031A2AE /* Assets.xcassets */, 85D0785128EAA8C90031A2AE /* LaunchScreen.storyboard */, 85D0785428EAA8C90031A2AE /* Info.plist */, ); - path = "first assignment"; + path = first_assignment; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 85D0784228EAA8C80031A2AE /* first assignment */ = { + 85D0784228EAA8C80031A2AE /* first_assignment */ = { isa = PBXNativeTarget; - buildConfigurationList = 85D0785728EAA8C90031A2AE /* Build configuration list for PBXNativeTarget "first assignment" */; + buildConfigurationList = 85D0785728EAA8C90031A2AE /* Build configuration list for PBXNativeTarget "first_assignment" */; buildPhases = ( 85D0783F28EAA8C80031A2AE /* Sources */, 85D0784028EAA8C80031A2AE /* Frameworks */, @@ -85,9 +91,9 @@ ); dependencies = ( ); - name = "first assignment"; + name = first_assignment; productName = "first assignment"; - productReference = 85D0784328EAA8C80031A2AE /* first assignment.app */; + productReference = 85D0784328EAA8C80031A2AE /* first_assignment.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -105,7 +111,7 @@ }; }; }; - buildConfigurationList = 85D0783E28EAA8C80031A2AE /* Build configuration list for PBXProject "first assignment" */; + buildConfigurationList = 85D0783E28EAA8C80031A2AE /* Build configuration list for PBXProject "first_assignment" */; compatibilityVersion = "Xcode 14.0"; developmentRegion = en; hasScannedForEncodings = 0; @@ -118,7 +124,7 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 85D0784228EAA8C80031A2AE /* first assignment */, + 85D0784228EAA8C80031A2AE /* first_assignment */, ); }; /* End PBXProject section */ @@ -141,9 +147,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 85D0784B28EAA8C80031A2AE /* ViewController.swift in Sources */, + 85D0784B28EAA8C80031A2AE /* NewAccount.swift in Sources */, + 85D0785D28EAAF980031A2AE /* CheckAccount.swift in Sources */, 85D0784728EAA8C80031A2AE /* AppDelegate.swift in Sources */, - 85D0785B28EAAA1D0031A2AE /* MainAccount.swift in Sources */, + 85D0785F28EAC1600031A2AE /* KakaoCustomView.swift in Sources */, + 85D0785B28EAAA1D0031A2AE /* LoginMenu.swift in Sources */, 85D0784928EAA8C80031A2AE /* SceneDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -293,7 +301,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 5AJPCAS7TS; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "first assignment/Info.plist"; + INFOPLIST_FILE = first_assignment/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UIMainStoryboardFile = Main; @@ -304,7 +312,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "Saint.first-assignment"; + PRODUCT_BUNDLE_IDENTIFIER = Saint.first_assignment; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -321,7 +329,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 5AJPCAS7TS; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "first assignment/Info.plist"; + INFOPLIST_FILE = first_assignment/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UIMainStoryboardFile = Main; @@ -332,7 +340,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "Saint.first-assignment"; + PRODUCT_BUNDLE_IDENTIFIER = Saint.first_assignment; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -343,7 +351,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 85D0783E28EAA8C80031A2AE /* Build configuration list for PBXProject "first assignment" */ = { + 85D0783E28EAA8C80031A2AE /* Build configuration list for PBXProject "first_assignment" */ = { isa = XCConfigurationList; buildConfigurations = ( 85D0785528EAA8C90031A2AE /* Debug */, @@ -352,7 +360,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 85D0785728EAA8C90031A2AE /* Build configuration list for PBXNativeTarget "first assignment" */ = { + 85D0785728EAA8C90031A2AE /* Build configuration list for PBXNativeTarget "first_assignment" */ = { isa = XCConfigurationList; buildConfigurations = ( 85D0785828EAA8C90031A2AE /* Debug */, diff --git a/first assignment/first assignment.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/first_assignment/first_assignment.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from first assignment/first assignment.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to first_assignment/first_assignment.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/first assignment/first assignment.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/first_assignment/first_assignment.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from first assignment/first assignment.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to first_assignment/first_assignment.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/first assignment/first assignment/AppDelegate.swift b/first_assignment/first_assignment/AppDelegate.swift similarity index 100% rename from first assignment/first assignment/AppDelegate.swift rename to first_assignment/first_assignment/AppDelegate.swift diff --git a/first assignment/first assignment/Assets.xcassets/AccentColor.colorset/Contents.json b/first_assignment/first_assignment/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from first assignment/first assignment/Assets.xcassets/AccentColor.colorset/Contents.json rename to first_assignment/first_assignment/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/first assignment/first assignment/Assets.xcassets/AppIcon.appiconset/Contents.json b/first_assignment/first_assignment/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from first assignment/first assignment/Assets.xcassets/AppIcon.appiconset/Contents.json rename to first_assignment/first_assignment/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/first assignment/first assignment/Assets.xcassets/Contents.json b/first_assignment/first_assignment/Assets.xcassets/Contents.json similarity index 100% rename from first assignment/first assignment/Assets.xcassets/Contents.json rename to first_assignment/first_assignment/Assets.xcassets/Contents.json diff --git a/first assignment/first assignment/Base.lproj/LaunchScreen.storyboard b/first_assignment/first_assignment/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from first assignment/first assignment/Base.lproj/LaunchScreen.storyboard rename to first_assignment/first_assignment/Base.lproj/LaunchScreen.storyboard diff --git a/first assignment/first assignment/Base.lproj/Main.storyboard b/first_assignment/first_assignment/Base.lproj/Main.storyboard similarity index 100% rename from first assignment/first assignment/Base.lproj/Main.storyboard rename to first_assignment/first_assignment/Base.lproj/Main.storyboard diff --git a/first assignment/first assignment/MainAccount.swift b/first_assignment/first_assignment/CheckAccount.swift similarity index 60% rename from first assignment/first assignment/MainAccount.swift rename to first_assignment/first_assignment/CheckAccount.swift index 7422fbe..7c16bcb 100644 --- a/first assignment/first assignment/MainAccount.swift +++ b/first_assignment/first_assignment/CheckAccount.swift @@ -1,5 +1,5 @@ // -// MainAccount.swift +// CheckAccount.swift // first assignment // // Created by saint on 2022/10/03. @@ -7,6 +7,6 @@ import UIKit -class MainAccount: NSObject { +class CheckAccount: NSObject { } diff --git a/first assignment/first assignment/Info.plist b/first_assignment/first_assignment/Info.plist similarity index 90% rename from first assignment/first assignment/Info.plist rename to first_assignment/first_assignment/Info.plist index dd3c9af..0eb786d 100644 --- a/first assignment/first assignment/Info.plist +++ b/first_assignment/first_assignment/Info.plist @@ -15,8 +15,6 @@ Default Configuration UISceneDelegateClassName $(PRODUCT_MODULE_NAME).SceneDelegate - UISceneStoryboardFile - Main diff --git a/first_assignment/first_assignment/KakaoCustomView.swift b/first_assignment/first_assignment/KakaoCustomView.swift new file mode 100644 index 0000000..4ec21f8 --- /dev/null +++ b/first_assignment/first_assignment/KakaoCustomView.swift @@ -0,0 +1,38 @@ +// +// KakaoTextField.swift +// first_assignment +// +// Created by saint on 2022/10/03. +// + +/// text field를 만들 때, 텍스트+밑줄을 한꺼번에 만드는 class +import UIKit + +class KakaoCustomView: UIView { + + private let nameTextField: UITextField = { + let textField = UITextField(frame: CGRect(x: 0, y: 0, width: 300, height: 39)) + return textField + }() + + private let underLineView: UIView = { + let view = UIView(frame: CGRect(x: 0, y: 39, width: 300, height: 1)) + view.backgroundColor = .systemGray4 + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + [nameTextField, underLineView].forEach { + self.addSubview($0) + } + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func dataBind(placeholder: String) { + nameTextField.placeholder = placeholder + } +} diff --git a/first_assignment/first_assignment/LoginMenu.swift b/first_assignment/first_assignment/LoginMenu.swift new file mode 100644 index 0000000..d44d296 --- /dev/null +++ b/first_assignment/first_assignment/LoginMenu.swift @@ -0,0 +1,84 @@ +// +// MainAccount.swift +// first assignment +// +// Created by saint on 2022/10/03. +// + +import UIKit + +class LoginMenu: UIViewController { + + private let startLabel: UILabel = { + let label = UILabel(frame: CGRect(x: 90, y: 120, width: 400, height: 40)) + label.text = "카카오톡을 시작합니다" + label.font = .systemFont(ofSize: 24, weight: .bold) + return label + }() + + private let introLabel: UILabel = { + let label = UILabel(frame: CGRect(x: 45, y: 180, width: 300, height: 40)) + label.numberOfLines = 2 + label.text = "사용하던 카카오계정이 있다면\n이메일 또는 전화번호로 로그인해 주세요." + label.font = .systemFont(ofSize: 12, weight: .medium) + label.textColor = .systemGray + label.textAlignment = .center + return label + }() + + private let emailPhoneTextField: KakaoCustomView = { + let textField = KakaoCustomView(frame: CGRect(x: 40, y: 250, width: 300, height: 40)) + return textField + }() + + private let passwordTextField: KakaoCustomView = { + let textField = KakaoCustomView(frame: CGRect(x: 40, y: 300, width: 300, height: 40)) + return textField + }() + + private func config(){ + emailPhoneTextField.dataBind(placeholder: "이메일 또는 전화번호") + passwordTextField.dataBind(placeholder: "비밀번호") + } + + private let loginButton: UIButton = { + let button = UIButton(frame: CGRect(x: 40, y: 360, width: 300, height: 40)) + button.setTitle("카카오계정 로그인", for: .normal) + button.setTitleColor(.black, for: .normal) + button.titleLabel?.font = .systemFont(ofSize: 16) + button.backgroundColor = .systemGray5 + return button + }() + + private let newAccountButton: UIButton = { + let button = UIButton(frame: CGRect(x: 40, y: 410, width: 300, height: 40)) + button.setTitle("새로운 카카오계정 만들기", for: .normal) + button.setTitleColor(.black, for: .normal) + button.titleLabel?.font = .systemFont(ofSize: 16) + button.backgroundColor = .systemGray5 + return button + }() + + private let findAccountButton: UIButton = { + let button = UIButton(frame: CGRect(x: 40, y: 460, width: 300, height: 30)) + button.setTitle("카카오계정 또는 비밀번호 찾기", for: .normal) + button.setTitleColor(.black, for: .normal) + button.titleLabel?.font = .systemFont(ofSize: 14) + button.backgroundColor = .systemGray5 + return button + }() + + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .white + config() + + let components: [Any] = [startLabel, introLabel, emailPhoneTextField, passwordTextField, loginButton, newAccountButton] + components.forEach{ + view.addSubview($0 as! UIView) + } + + } + +} diff --git a/first assignment/first assignment/ViewController.swift b/first_assignment/first_assignment/NewAccount.swift similarity index 100% rename from first assignment/first assignment/ViewController.swift rename to first_assignment/first_assignment/NewAccount.swift diff --git a/first assignment/first assignment/SceneDelegate.swift b/first_assignment/first_assignment/SceneDelegate.swift similarity index 66% rename from first assignment/first assignment/SceneDelegate.swift rename to first_assignment/first_assignment/SceneDelegate.swift index be7d9f8..c1ea16c 100644 --- a/first assignment/first assignment/SceneDelegate.swift +++ b/first_assignment/first_assignment/SceneDelegate.swift @@ -10,14 +10,25 @@ import UIKit class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? - - + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { - // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. - // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. - // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). - guard let _ = (scene as? UIWindowScene) else { return } - } + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + + if let windowScene = scene as? UIWindowScene { + + let window = UIWindow(windowScene: windowScene) + window.overrideUserInterfaceStyle = UIUserInterfaceStyle.light + + let rootVC = LoginMenu() + + window.rootViewController = rootVC + window.makeKeyAndVisible() + self.window = window + } + } func sceneDidDisconnect(_ scene: UIScene) { // Called as the scene is being released by the system. From 1e6afc1fe54a6666de6b75a0068549feb0b7c241 Mon Sep 17 00:00:00 2001 From: BaeSungho Date: Mon, 3 Oct 2022 21:26:07 +0900 Subject: [PATCH 2/7] =?UTF-8?q?=EB=A7=88=EC=A7=80=EB=A7=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../first_assignment/CheckAccount.swift | 47 ++++++++++++- .../first_assignment/KakaoCustomView.swift | 2 +- .../first_assignment/LoginMenu.swift | 41 ++++++++--- .../first_assignment/NewAccount.swift | 68 +++++++++++++++++-- .../first_assignment/SceneDelegate.swift | 3 +- 5 files changed, 142 insertions(+), 19 deletions(-) diff --git a/first_assignment/first_assignment/CheckAccount.swift b/first_assignment/first_assignment/CheckAccount.swift index 7c16bcb..21c57e3 100644 --- a/first_assignment/first_assignment/CheckAccount.swift +++ b/first_assignment/first_assignment/CheckAccount.swift @@ -7,6 +7,51 @@ import UIKit -class CheckAccount: NSObject { +class CheckAccount: UIViewController { + + private let helloLabel: UILabel = { + let label = UILabel(frame: CGRect(x: 45, y: 300, width: 300, height: 60)) + label.numberOfLines = 2 + label.text = "000님\n환영합니다" + label.font = .systemFont(ofSize: 20, weight: .bold) + label.textColor = .black + label.textAlignment = .center + return label + }() + + private let acceptButton: UIButton = { + let button = UIButton(frame: CGRect(x: 45, y: 415, width: 300, height: 40)) + button.setTitle("확인", for: .normal) + button.setTitleColor(.black, for: .normal) + button.titleLabel?.font = .systemFont(ofSize: 16, weight: .bold) + button.backgroundColor = .systemYellow + button.addTarget(self, action: #selector(touchupOkayButton), for: .touchUpInside) + return button + }() + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .white + + let components: [Any] = [helloLabel, acceptButton] + components.forEach{ + view.addSubview($0 as! UIView) + } + } + + func showText(email: String){ + helloLabel.text = "당신의 선택은 \(email)였군요!" + } + + @objc + private func touchupOkayButton(){ + if self.navigationController == nil{ + self.dismiss(animated: true, completion: nil) + } + else{ + self.navigationController?.popViewController(animated: true) + } + } + } diff --git a/first_assignment/first_assignment/KakaoCustomView.swift b/first_assignment/first_assignment/KakaoCustomView.swift index 4ec21f8..fde917a 100644 --- a/first_assignment/first_assignment/KakaoCustomView.swift +++ b/first_assignment/first_assignment/KakaoCustomView.swift @@ -10,7 +10,7 @@ import UIKit class KakaoCustomView: UIView { - private let nameTextField: UITextField = { + let nameTextField: UITextField = { let textField = UITextField(frame: CGRect(x: 0, y: 0, width: 300, height: 39)) return textField }() diff --git a/first_assignment/first_assignment/LoginMenu.swift b/first_assignment/first_assignment/LoginMenu.swift index d44d296..481e392 100644 --- a/first_assignment/first_assignment/LoginMenu.swift +++ b/first_assignment/first_assignment/LoginMenu.swift @@ -9,15 +9,18 @@ import UIKit class LoginMenu: UIViewController { + static let height : Int = 40 + private let startLabel: UILabel = { - let label = UILabel(frame: CGRect(x: 90, y: 120, width: 400, height: 40)) + let label = UILabel(frame: CGRect(x: 90, y: 120, width: UIScreen.main.bounds.width - 60, height: 40)) label.text = "카카오톡을 시작합니다" label.font = .systemFont(ofSize: 24, weight: .bold) return label }() private let introLabel: UILabel = { - let label = UILabel(frame: CGRect(x: 45, y: 180, width: 300, height: 40)) + + let label = UILabel(frame: CGRect(x: 45, y: 170, width: 300, height: 40 )) label.numberOfLines = 2 label.text = "사용하던 카카오계정이 있다면\n이메일 또는 전화번호로 로그인해 주세요." label.font = .systemFont(ofSize: 12, weight: .medium) @@ -27,12 +30,12 @@ class LoginMenu: UIViewController { }() private let emailPhoneTextField: KakaoCustomView = { - let textField = KakaoCustomView(frame: CGRect(x: 40, y: 250, width: 300, height: 40)) + let textField = KakaoCustomView(frame: CGRect(x: 45, y: 250, width: 300, height: 40)) return textField }() private let passwordTextField: KakaoCustomView = { - let textField = KakaoCustomView(frame: CGRect(x: 40, y: 300, width: 300, height: 40)) + let textField = KakaoCustomView(frame: CGRect(x: 45, y: 300, width: 300, height: 40)) return textField }() @@ -42,29 +45,31 @@ class LoginMenu: UIViewController { } private let loginButton: UIButton = { - let button = UIButton(frame: CGRect(x: 40, y: 360, width: 300, height: 40)) + let button = UIButton(frame: CGRect(x: 45, y: 365, width: 300, height: 40)) button.setTitle("카카오계정 로그인", for: .normal) button.setTitleColor(.black, for: .normal) button.titleLabel?.font = .systemFont(ofSize: 16) button.backgroundColor = .systemGray5 + button.addTarget(self, action: #selector(presentToCheckAccount), for: .touchUpInside) return button }() private let newAccountButton: UIButton = { - let button = UIButton(frame: CGRect(x: 40, y: 410, width: 300, height: 40)) + let button = UIButton(frame: CGRect(x: 45, y: 415, width: 300, height: 40)) button.setTitle("새로운 카카오계정 만들기", for: .normal) button.setTitleColor(.black, for: .normal) button.titleLabel?.font = .systemFont(ofSize: 16) button.backgroundColor = .systemGray5 + //self는 어디서든 main class를 가리킨다. + button.addTarget(self, action: #selector(pushToNewAccount), for: .touchUpInside) return button }() private let findAccountButton: UIButton = { - let button = UIButton(frame: CGRect(x: 40, y: 460, width: 300, height: 30)) + let button = UIButton(frame: CGRect(x: 45, y: 465, width: 300, height: 30)) button.setTitle("카카오계정 또는 비밀번호 찾기", for: .normal) button.setTitleColor(.black, for: .normal) button.titleLabel?.font = .systemFont(ofSize: 14) - button.backgroundColor = .systemGray5 return button }() @@ -74,11 +79,27 @@ class LoginMenu: UIViewController { view.backgroundColor = .white config() - let components: [Any] = [startLabel, introLabel, emailPhoneTextField, passwordTextField, loginButton, newAccountButton] + let components: [Any] = [startLabel, introLabel, emailPhoneTextField, passwordTextField, loginButton, newAccountButton, findAccountButton] components.forEach{ view.addSubview($0 as! UIView) } - + } + + @objc + private func pushToNewAccount(){ + let na = NewAccount() + self.navigationController?.pushViewController(na, animated: true) + } + + @objc + private func presentToCheckAccount(){ + let ca = CheckAccount() + ca.modalPresentationStyle = .fullScreen + self.present(ca, animated: true, completion: nil) // animated : true -> 애니메이션을 보이게 하기; completion : 종료 후에 실행할 작업, closer 활용하기 + + if let answer = emailPhoneTextField.nameTextField.text{ + ca.showText(email: answer) + } } } diff --git a/first_assignment/first_assignment/NewAccount.swift b/first_assignment/first_assignment/NewAccount.swift index bc3ca48..2712f40 100644 --- a/first_assignment/first_assignment/NewAccount.swift +++ b/first_assignment/first_assignment/NewAccount.swift @@ -7,13 +7,69 @@ import UIKit -class ViewController: UIViewController { - +class NewAccount: UIViewController { + + private let startLabel: UILabel = { + let label = UILabel(frame: CGRect(x: 90, y: 120, width: 400, height: 40)) + label.text = "카카오톡을 시작합니다" + label.font = .systemFont(ofSize: 24, weight: .bold) + return label + }() + + private let emailPhoneTextField: KakaoCustomView = { + let textField = KakaoCustomView(frame: CGRect(x: 45, y: 250, width: 300, height: 40)) + return textField + }() + + private let passwordTextField: KakaoCustomView = { + let textField = KakaoCustomView(frame: CGRect(x: 45, y: 300, width: 300, height: 40)) + return textField + }() + + private let passwordCheckTextField: KakaoCustomView = { + let textField = KakaoCustomView(frame: CGRect(x: 45, y: 350, width: 300, height: 40)) + return textField + }() + + private func config(){ + emailPhoneTextField.dataBind(placeholder: "이메일 또는 전화번호") + passwordTextField.dataBind(placeholder: "비밀번호") + passwordCheckTextField.dataBind(placeholder: "비밀번호 확인") + } + + private let newAccountButton: UIButton = { + let button = UIButton(frame: CGRect(x: 45, y: 415, width: 300, height: 40)) + button.setTitle("새로운 카카오계정 만들기", for: .normal) + button.setTitleColor(.black, for: .normal) + button.titleLabel?.font = .systemFont(ofSize: 16) + button.backgroundColor = .systemGray5 + button.addTarget(self, action: #selector(presentToCheckAccount), for: .touchUpInside) + return button + }() + override func viewDidLoad() { super.viewDidLoad() - // Do any additional setup after loading the view. + view.backgroundColor = .white + config() + + let components: [Any] = [startLabel, emailPhoneTextField, passwordTextField, passwordCheckTextField, newAccountButton] + components.forEach{ + view.addSubview($0 as! UIView) + } } - - + + @objc + private func presentToCheckAccount(){ + let ca = CheckAccount() + ca.modalPresentationStyle = .fullScreen + self.present(ca, animated: true, completion: { + self.navigationController?.popViewController(animated: true) + }) // animated : true -> 애니메이션을 보이게 하기; completion : 종료 후에 실행할 작업, closer 활용하기 + + if let answer = emailPhoneTextField.nameTextField.text{ + ca.showText(email: answer) + } + + } + } - diff --git a/first_assignment/first_assignment/SceneDelegate.swift b/first_assignment/first_assignment/SceneDelegate.swift index c1ea16c..415ffb2 100644 --- a/first_assignment/first_assignment/SceneDelegate.swift +++ b/first_assignment/first_assignment/SceneDelegate.swift @@ -23,8 +23,9 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window.overrideUserInterfaceStyle = UIUserInterfaceStyle.light let rootVC = LoginMenu() + let navigationController = UINavigationController(rootViewController: rootVC) - window.rootViewController = rootVC + window.rootViewController = navigationController window.makeKeyAndVisible() self.window = window } From e2bf8c72250d8afbb9b95ec45120cc63d1265883 Mon Sep 17 00:00:00 2001 From: BaeSungho Date: Mon, 3 Oct 2022 21:40:37 +0900 Subject: [PATCH 3/7] =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 45661d3..9f645c8 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ + + ![gitbanner_hansol](https://tva1.sinaimg.cn/large/e6c9d24egy1h6m86nwttxj22aj0hiabx.jpg) ![curri](https://tva1.sinaimg.cn/large/e6c9d24egy1h6m8g413dwj21hc0u0dja.jpg) From 63ced85db4248dc25175859e847127eb7e319bfe Mon Sep 17 00:00:00 2001 From: BaeSungho Date: Mon, 3 Oct 2022 21:45:59 +0900 Subject: [PATCH 4/7] =?UTF-8?q?=EC=82=AC=EC=A7=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f645c8..514e7b7 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,6 @@ -![gitbanner_hansol](https://tva1.sinaimg.cn/large/e6c9d24egy1h6m86nwttxj22aj0hiabx.jpg) +![gitbanner_sungho](https://user-images.githubusercontent.com/45239582/193579660-2944d5c1-81e1-4e8e-b91f-55528cc1f595.png) ![curri](https://tva1.sinaimg.cn/large/e6c9d24egy1h6m8g413dwj21hc0u0dja.jpg) From a313e499ec93af16e03f54263a8181df85171dcf Mon Sep 17 00:00:00 2001 From: BaeSungho Date: Tue, 11 Oct 2022 20:54:40 +0900 Subject: [PATCH 5/7] =?UTF-8?q?=EA=B3=BC=EC=A0=9C1=20=EC=A0=84=EC=86=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 34 +- .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/swiftpm/Package.resolved | 14 + .../project.pbxproj | 402 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/swiftpm/Package.resolved | 14 + .../secondAssignment/AppDelegate.swift | 36 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 13 + .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../Base.lproj/Main.storyboard | 24 ++ .../secondAssignment/CheckAccount.swift | 79 ++++ secondAssignment/secondAssignment/Info.plist | 25 ++ .../secondAssignment/KakaoCustomView.swift | 67 +++ .../secondAssignment/LoginMenu.swift | 165 +++++++ .../secondAssignment/NewAccount.swift | 119 ++++++ .../secondAssignment/SceneDelegate.swift | 65 +++ 20 files changed, 1104 insertions(+), 10 deletions(-) rename first_assignment/{first_assignment.xcodeproj => fist_assignment.xcodeproj}/project.pbxproj (93%) rename first_assignment/{first_assignment.xcodeproj => fist_assignment.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (100%) rename first_assignment/{first_assignment.xcodeproj => fist_assignment.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) create mode 100644 first_assignment/fist_assignment.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 secondAssignment/secondAssignment.xcodeproj/project.pbxproj create mode 100644 secondAssignment/secondAssignment.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 secondAssignment/secondAssignment.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 secondAssignment/secondAssignment.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 secondAssignment/secondAssignment/AppDelegate.swift create mode 100644 secondAssignment/secondAssignment/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 secondAssignment/secondAssignment/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 secondAssignment/secondAssignment/Assets.xcassets/Contents.json create mode 100644 secondAssignment/secondAssignment/Base.lproj/LaunchScreen.storyboard create mode 100644 secondAssignment/secondAssignment/Base.lproj/Main.storyboard create mode 100644 secondAssignment/secondAssignment/CheckAccount.swift create mode 100644 secondAssignment/secondAssignment/Info.plist create mode 100644 secondAssignment/secondAssignment/KakaoCustomView.swift create mode 100644 secondAssignment/secondAssignment/LoginMenu.swift create mode 100644 secondAssignment/secondAssignment/NewAccount.swift create mode 100644 secondAssignment/secondAssignment/SceneDelegate.swift diff --git a/first_assignment/first_assignment.xcodeproj/project.pbxproj b/first_assignment/fist_assignment.xcodeproj/project.pbxproj similarity index 93% rename from first_assignment/first_assignment.xcodeproj/project.pbxproj rename to first_assignment/fist_assignment.xcodeproj/project.pbxproj index 705fc17..b4b2750 100644 --- a/first_assignment/first_assignment.xcodeproj/project.pbxproj +++ b/first_assignment/fist_assignment.xcodeproj/project.pbxproj @@ -19,7 +19,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 85D0784328EAA8C80031A2AE /* first_assignment.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = first_assignment.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 85D0784328EAA8C80031A2AE /* fist_assignment.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = fist_assignment.app; sourceTree = BUILT_PRODUCTS_DIR; }; 85D0784628EAA8C80031A2AE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 85D0784828EAA8C80031A2AE /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 85D0784A28EAA8C80031A2AE /* NewAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewAccount.swift; sourceTree = ""; }; @@ -54,7 +54,7 @@ 85D0784428EAA8C80031A2AE /* Products */ = { isa = PBXGroup; children = ( - 85D0784328EAA8C80031A2AE /* first_assignment.app */, + 85D0784328EAA8C80031A2AE /* fist_assignment.app */, ); name = Products; sourceTree = ""; @@ -79,9 +79,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 85D0784228EAA8C80031A2AE /* first_assignment */ = { + 85D0784228EAA8C80031A2AE /* fist_assignment */ = { isa = PBXNativeTarget; - buildConfigurationList = 85D0785728EAA8C90031A2AE /* Build configuration list for PBXNativeTarget "first_assignment" */; + buildConfigurationList = 85D0785728EAA8C90031A2AE /* Build configuration list for PBXNativeTarget "fist_assignment" */; buildPhases = ( 85D0783F28EAA8C80031A2AE /* Sources */, 85D0784028EAA8C80031A2AE /* Frameworks */, @@ -91,9 +91,9 @@ ); dependencies = ( ); - name = first_assignment; + name = fist_assignment; productName = "first assignment"; - productReference = 85D0784328EAA8C80031A2AE /* first_assignment.app */; + productReference = 85D0784328EAA8C80031A2AE /* fist_assignment.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -111,7 +111,7 @@ }; }; }; - buildConfigurationList = 85D0783E28EAA8C80031A2AE /* Build configuration list for PBXProject "first_assignment" */; + buildConfigurationList = 85D0783E28EAA8C80031A2AE /* Build configuration list for PBXProject "fist_assignment" */; compatibilityVersion = "Xcode 14.0"; developmentRegion = en; hasScannedForEncodings = 0; @@ -120,11 +120,14 @@ Base, ); mainGroup = 85D0783A28EAA8C80031A2AE; + packageReferences = ( + 85ECE4AA28F56EA000050B6F /* XCRemoteSwiftPackageReference "SnapKit" */, + ); productRefGroup = 85D0784428EAA8C80031A2AE /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 85D0784228EAA8C80031A2AE /* first_assignment */, + 85D0784228EAA8C80031A2AE /* fist_assignment */, ); }; /* End PBXProject section */ @@ -351,7 +354,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 85D0783E28EAA8C80031A2AE /* Build configuration list for PBXProject "first_assignment" */ = { + 85D0783E28EAA8C80031A2AE /* Build configuration list for PBXProject "fist_assignment" */ = { isa = XCConfigurationList; buildConfigurations = ( 85D0785528EAA8C90031A2AE /* Debug */, @@ -360,7 +363,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 85D0785728EAA8C90031A2AE /* Build configuration list for PBXNativeTarget "first_assignment" */ = { + 85D0785728EAA8C90031A2AE /* Build configuration list for PBXNativeTarget "fist_assignment" */ = { isa = XCConfigurationList; buildConfigurations = ( 85D0785828EAA8C90031A2AE /* Debug */, @@ -370,6 +373,17 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 85ECE4AA28F56EA000050B6F /* XCRemoteSwiftPackageReference "SnapKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SnapKit/SnapKit"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.0.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ }; rootObject = 85D0783B28EAA8C80031A2AE /* Project object */; } diff --git a/first_assignment/first_assignment.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/first_assignment/fist_assignment.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from first_assignment/first_assignment.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to first_assignment/fist_assignment.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/first_assignment/first_assignment.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/first_assignment/fist_assignment.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from first_assignment/first_assignment.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to first_assignment/fist_assignment.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/first_assignment/fist_assignment.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/first_assignment/fist_assignment.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..9cae081 --- /dev/null +++ b/first_assignment/fist_assignment.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,14 @@ +{ + "pins" : [ + { + "identity" : "snapkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SnapKit/SnapKit", + "state" : { + "revision" : "f222cbdf325885926566172f6f5f06af95473158", + "version" : "5.6.0" + } + } + ], + "version" : 2 +} diff --git a/secondAssignment/secondAssignment.xcodeproj/project.pbxproj b/secondAssignment/secondAssignment.xcodeproj/project.pbxproj new file mode 100644 index 0000000..e5f0678 --- /dev/null +++ b/secondAssignment/secondAssignment.xcodeproj/project.pbxproj @@ -0,0 +1,402 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 85ECE4B828F5787100050B6F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85ECE4B728F5787100050B6F /* AppDelegate.swift */; }; + 85ECE4BA28F5787100050B6F /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85ECE4B928F5787100050B6F /* SceneDelegate.swift */; }; + 85ECE4BC28F5787100050B6F /* LoginMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85ECE4BB28F5787100050B6F /* LoginMenu.swift */; }; + 85ECE4BF28F5787100050B6F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85ECE4BD28F5787100050B6F /* Main.storyboard */; }; + 85ECE4C128F5787100050B6F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 85ECE4C028F5787100050B6F /* Assets.xcassets */; }; + 85ECE4C428F5787100050B6F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85ECE4C228F5787100050B6F /* LaunchScreen.storyboard */; }; + 85ECE4CD28F579D000050B6F /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = 85ECE4CC28F579D000050B6F /* SnapKit */; }; + 85ECE4CF28F57A1C00050B6F /* KakaoCustomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85ECE4CE28F57A1C00050B6F /* KakaoCustomView.swift */; }; + 85ECE4D128F57A7C00050B6F /* NewAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85ECE4D028F57A7C00050B6F /* NewAccount.swift */; }; + 85ECE4D328F57AA100050B6F /* CheckAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85ECE4D228F57AA100050B6F /* CheckAccount.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 85ECE4B428F5787100050B6F /* secondAssignment.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = secondAssignment.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 85ECE4B728F5787100050B6F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 85ECE4B928F5787100050B6F /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 85ECE4BB28F5787100050B6F /* LoginMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginMenu.swift; sourceTree = ""; }; + 85ECE4BE28F5787100050B6F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 85ECE4C028F5787100050B6F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 85ECE4C328F5787100050B6F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 85ECE4C528F5787100050B6F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 85ECE4CE28F57A1C00050B6F /* KakaoCustomView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KakaoCustomView.swift; sourceTree = ""; }; + 85ECE4D028F57A7C00050B6F /* NewAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewAccount.swift; sourceTree = ""; }; + 85ECE4D228F57AA100050B6F /* CheckAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckAccount.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 85ECE4B128F5787100050B6F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 85ECE4CD28F579D000050B6F /* SnapKit in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 85ECE4AB28F5787100050B6F = { + isa = PBXGroup; + children = ( + 85ECE4B628F5787100050B6F /* secondAssignment */, + 85ECE4B528F5787100050B6F /* Products */, + ); + sourceTree = ""; + }; + 85ECE4B528F5787100050B6F /* Products */ = { + isa = PBXGroup; + children = ( + 85ECE4B428F5787100050B6F /* secondAssignment.app */, + ); + name = Products; + sourceTree = ""; + }; + 85ECE4B628F5787100050B6F /* secondAssignment */ = { + isa = PBXGroup; + children = ( + 85ECE4B728F5787100050B6F /* AppDelegate.swift */, + 85ECE4B928F5787100050B6F /* SceneDelegate.swift */, + 85ECE4BD28F5787100050B6F /* Main.storyboard */, + 85ECE4C028F5787100050B6F /* Assets.xcassets */, + 85ECE4C228F5787100050B6F /* LaunchScreen.storyboard */, + 85ECE4C528F5787100050B6F /* Info.plist */, + 85ECE4CE28F57A1C00050B6F /* KakaoCustomView.swift */, + 85ECE4BB28F5787100050B6F /* LoginMenu.swift */, + 85ECE4D028F57A7C00050B6F /* NewAccount.swift */, + 85ECE4D228F57AA100050B6F /* CheckAccount.swift */, + ); + path = secondAssignment; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 85ECE4B328F5787100050B6F /* secondAssignment */ = { + isa = PBXNativeTarget; + buildConfigurationList = 85ECE4C828F5787100050B6F /* Build configuration list for PBXNativeTarget "secondAssignment" */; + buildPhases = ( + 85ECE4B028F5787100050B6F /* Sources */, + 85ECE4B128F5787100050B6F /* Frameworks */, + 85ECE4B228F5787100050B6F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = secondAssignment; + packageProductDependencies = ( + 85ECE4CC28F579D000050B6F /* SnapKit */, + ); + productName = secondAssignment; + productReference = 85ECE4B428F5787100050B6F /* secondAssignment.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 85ECE4AC28F5787100050B6F /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1400; + LastUpgradeCheck = 1400; + TargetAttributes = { + 85ECE4B328F5787100050B6F = { + CreatedOnToolsVersion = 14.0.1; + }; + }; + }; + buildConfigurationList = 85ECE4AF28F5787100050B6F /* Build configuration list for PBXProject "secondAssignment" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 85ECE4AB28F5787100050B6F; + packageReferences = ( + 85ECE4CB28F579D000050B6F /* XCRemoteSwiftPackageReference "SnapKit" */, + ); + productRefGroup = 85ECE4B528F5787100050B6F /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 85ECE4B328F5787100050B6F /* secondAssignment */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 85ECE4B228F5787100050B6F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 85ECE4C428F5787100050B6F /* LaunchScreen.storyboard in Resources */, + 85ECE4C128F5787100050B6F /* Assets.xcassets in Resources */, + 85ECE4BF28F5787100050B6F /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 85ECE4B028F5787100050B6F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 85ECE4D328F57AA100050B6F /* CheckAccount.swift in Sources */, + 85ECE4D128F57A7C00050B6F /* NewAccount.swift in Sources */, + 85ECE4BC28F5787100050B6F /* LoginMenu.swift in Sources */, + 85ECE4CF28F57A1C00050B6F /* KakaoCustomView.swift in Sources */, + 85ECE4B828F5787100050B6F /* AppDelegate.swift in Sources */, + 85ECE4BA28F5787100050B6F /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 85ECE4BD28F5787100050B6F /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 85ECE4BE28F5787100050B6F /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 85ECE4C228F5787100050B6F /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 85ECE4C328F5787100050B6F /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 85ECE4C628F5787100050B6F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + 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; + GCC_C_LANGUAGE_STANDARD = gnu11; + 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; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 85ECE4C728F5787100050B6F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + 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; + GCC_C_LANGUAGE_STANDARD = gnu11; + 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; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 85ECE4C928F5787100050B6F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 5AJPCAS7TS; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = secondAssignment/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + 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 = Saint.secondAssignment; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 85ECE4CA28F5787100050B6F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 5AJPCAS7TS; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = secondAssignment/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + 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 = Saint.secondAssignment; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 85ECE4AF28F5787100050B6F /* Build configuration list for PBXProject "secondAssignment" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 85ECE4C628F5787100050B6F /* Debug */, + 85ECE4C728F5787100050B6F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 85ECE4C828F5787100050B6F /* Build configuration list for PBXNativeTarget "secondAssignment" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 85ECE4C928F5787100050B6F /* Debug */, + 85ECE4CA28F5787100050B6F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 85ECE4CB28F579D000050B6F /* XCRemoteSwiftPackageReference "SnapKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SnapKit/SnapKit"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.0.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 85ECE4CC28F579D000050B6F /* SnapKit */ = { + isa = XCSwiftPackageProductDependency; + package = 85ECE4CB28F579D000050B6F /* XCRemoteSwiftPackageReference "SnapKit" */; + productName = SnapKit; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 85ECE4AC28F5787100050B6F /* Project object */; +} diff --git a/secondAssignment/secondAssignment.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/secondAssignment/secondAssignment.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/secondAssignment/secondAssignment.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/secondAssignment/secondAssignment.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/secondAssignment/secondAssignment.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/secondAssignment/secondAssignment.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/secondAssignment/secondAssignment.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/secondAssignment/secondAssignment.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..9cae081 --- /dev/null +++ b/secondAssignment/secondAssignment.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,14 @@ +{ + "pins" : [ + { + "identity" : "snapkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SnapKit/SnapKit", + "state" : { + "revision" : "f222cbdf325885926566172f6f5f06af95473158", + "version" : "5.6.0" + } + } + ], + "version" : 2 +} diff --git a/secondAssignment/secondAssignment/AppDelegate.swift b/secondAssignment/secondAssignment/AppDelegate.swift new file mode 100644 index 0000000..11857eb --- /dev/null +++ b/secondAssignment/secondAssignment/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// secondAssignment +// +// Created by saint on 2022/10/11. +// + +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/secondAssignment/secondAssignment/Assets.xcassets/AccentColor.colorset/Contents.json b/secondAssignment/secondAssignment/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/secondAssignment/secondAssignment/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/secondAssignment/secondAssignment/Assets.xcassets/AppIcon.appiconset/Contents.json b/secondAssignment/secondAssignment/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/secondAssignment/secondAssignment/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/secondAssignment/secondAssignment/Assets.xcassets/Contents.json b/secondAssignment/secondAssignment/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/secondAssignment/secondAssignment/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/secondAssignment/secondAssignment/Base.lproj/LaunchScreen.storyboard b/secondAssignment/secondAssignment/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/secondAssignment/secondAssignment/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/secondAssignment/secondAssignment/Base.lproj/Main.storyboard b/secondAssignment/secondAssignment/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/secondAssignment/secondAssignment/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/secondAssignment/secondAssignment/CheckAccount.swift b/secondAssignment/secondAssignment/CheckAccount.swift new file mode 100644 index 0000000..f0b76e7 --- /dev/null +++ b/secondAssignment/secondAssignment/CheckAccount.swift @@ -0,0 +1,79 @@ +// +// CheckAccount.swift +// secondAssignment +// +// Created by saint on 2022/10/11. +// + +import UIKit + +class CheckAccount: UIViewController { + + private let helloLabel: UILabel = { + let label = UILabel(frame: CGRect(x: 45, y: 300, width: 300, height: 60)) + label.numberOfLines = 2 + label.text = "000님\n환영합니다" + label.font = .systemFont(ofSize: 20, weight: .bold) + label.textColor = .black + label.textAlignment = .center + return label + }() + + private let acceptButton: UIButton = { + let button = UIButton(frame: CGRect(x: 45, y: 415, width: 300, height: 40)) + button.setTitle("확인", for: .normal) + button.setTitleColor(.black, for: .normal) + button.titleLabel?.font = .systemFont(ofSize: 16, weight: .bold) + button.backgroundColor = .systemYellow + button.addTarget(self, action: #selector(touchupOkayButton), for: .touchUpInside) + return button + }() + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .white + + layout() + + let components: [Any] = [helloLabel, acceptButton] + components.forEach{ + view.addSubview($0 as! UIView) + } + } + + func showText(email: String){ + helloLabel.text = "\(email)님 \n 환영합니다" + } + + @objc + private func touchupOkayButton(){ + if self.navigationController == nil{ + self.dismiss(animated: true, completion: nil) + } + else{ + self.navigationController?.popViewController(animated: true) + } + } +} + +extension CheckAccount{ + + private func layout(){ + [helloLabel, acceptButton].forEach{ + view.addSubview($0) + } + + helloLabel.snp.makeConstraints{ make in + make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(241) + make.centerX.equalTo(self.view.safeAreaLayoutGuide) + } + + acceptButton.snp.makeConstraints{ + $0.top.equalTo(self.helloLabel.snp.bottom).offset(117) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(21) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing).offset(-21) + $0.height.equalTo(44) + } + } +} + diff --git a/secondAssignment/secondAssignment/Info.plist b/secondAssignment/secondAssignment/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/secondAssignment/secondAssignment/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/secondAssignment/secondAssignment/KakaoCustomView.swift b/secondAssignment/secondAssignment/KakaoCustomView.swift new file mode 100644 index 0000000..8236e5c --- /dev/null +++ b/secondAssignment/secondAssignment/KakaoCustomView.swift @@ -0,0 +1,67 @@ +// +// KakaoCustomView.swift +// secondAssignment +// +// Created by saint on 2022/10/11. +// + +import UIKit +import SnapKit + +class KakaoCustomView: UIView { + + let nameTextField: UITextField = { + let textField = UITextField(frame: CGRect(x: 0, y: 0, width: 300, height: 39)) + return textField + }() + + private let underLineView: UIView = { + let view = UIView(frame: CGRect(x: 0, y: 39, width: 300, height: 1)) + view.backgroundColor = .systemGray4 + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + layout() + + [nameTextField, underLineView].forEach { + self.addSubview($0) + } + } + + required init?(coder: NSCoder) { + fatalError("iniaat(coder:) has not been implemented") + } + + func dataBind(placeholder: String) { + nameTextField.placeholder = placeholder + } +} + +extension KakaoCustomView{ + + private func layout(){ + + [nameTextField, underLineView].forEach{ + self.addSubview($0) + } + + nameTextField.snp.makeConstraints{make in + make.top.equalTo(self.snp.top) + make.leading.equalTo(self.snp.leading) + make.trailing.equalTo(self.snp.trailing) + make.height.equalTo(48) + } + + underLineView.snp.makeConstraints{ + $0.top.equalTo(self.nameTextField.snp.bottom) + $0.leading.equalTo(self.snp.leading) + $0.trailing.equalTo(self.snp.trailing) + $0.height.equalTo(1) + } + + } +} + + diff --git a/secondAssignment/secondAssignment/LoginMenu.swift b/secondAssignment/secondAssignment/LoginMenu.swift new file mode 100644 index 0000000..d5eb104 --- /dev/null +++ b/secondAssignment/secondAssignment/LoginMenu.swift @@ -0,0 +1,165 @@ +// +// ViewController.swift +// secondAssignment +// +// Created by saint on 2022/10/11. +// + +import UIKit +import SnapKit + +final class LoginMenu: UIViewController { + + private let startLabel: UILabel = { + let label = UILabel(frame: CGRect(x: 90, y: 120, width: UIScreen.main.bounds.width - 60, height: 40)) + label.text = "카카오톡을 시작합니다" + label.font = .systemFont(ofSize: 24, weight: .bold) + return label + }() + + private let introLabel: UILabel = { + + let label = UILabel(frame: CGRect(x: 45, y: 170, width: 300, height: 40 )) + label.numberOfLines = 2 + label.text = "사용하던 카카오계정이 있다면\n이메일 또는 전화번호로 로그인해 주세요." + label.font = .systemFont(ofSize: 12, weight: .medium) + label.textColor = .systemGray + label.textAlignment = .center + return label + }() + + private let emailPhoneTextField: KakaoCustomView = { + let textField = KakaoCustomView(frame: CGRect(x: 45, y: 250, width: 300, height: 40)) + return textField + }() + + private let passwordTextField: KakaoCustomView = { + let textField = KakaoCustomView(frame: CGRect(x: 45, y: 300, width: 300, height: 40)) + return textField + }() + + private func config(){ + emailPhoneTextField.dataBind(placeholder: "이메일 또는 전화번호") + passwordTextField.dataBind(placeholder: "비밀번호") + } + + private let loginButton: UIButton = { + let button = UIButton(frame: CGRect(x: 45, y: 365, width: 300, height: 40)) + button.setTitle("카카오계정 로그인", for: .normal) + button.setTitleColor(.black, for: .normal) + button.titleLabel?.font = .systemFont(ofSize: 16) + button.backgroundColor = .systemGray5 + button.addTarget(self, action: #selector(presentToCheckAccount), for: .touchUpInside) + return button + }() + + private let newAccountButton: UIButton = { + let button = UIButton(frame: CGRect(x: 45, y: 415, width: 300, height: 40)) + button.setTitle("새로운 카카오계정 만들기", for: .normal) + button.setTitleColor(.black, for: .normal) + button.titleLabel?.font = .systemFont(ofSize: 16) + button.backgroundColor = .systemGray5 + //self는 어디서든 main class를 가리킨다. + button.addTarget(self, action: #selector(pushToNewAccount), for: .touchUpInside) + return button + }() + + private let findAccountButton: UIButton = { + let button = UIButton(frame: CGRect(x: 45, y: 465, width: 300, height: 30)) + button.setTitle("카카오계정 또는 비밀번호 찾기", for: .normal) + button.setTitleColor(.black, for: .normal) + button.titleLabel?.font = .systemFont(ofSize: 14) + return button + }() + + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .white + config() + layout() + + let components: [Any] = [startLabel, introLabel, emailPhoneTextField, passwordTextField, loginButton, newAccountButton, findAccountButton] + components.forEach{ + view.addSubview($0 as! UIView) + } + } +} + + +extension LoginMenu{ + + private func layout(){ + [startLabel, introLabel, emailPhoneTextField, passwordTextField, loginButton, newAccountButton, findAccountButton].forEach{ + view.addSubview($0) + } + + startLabel.snp.makeConstraints{ make in + make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(40) + make.centerX.equalTo(self.view.safeAreaLayoutGuide) + + } + + introLabel.snp.makeConstraints{ + $0.top.equalTo(self.startLabel.snp.bottom).offset(20) + $0.centerX.equalTo(self.view.safeAreaLayoutGuide) + } + + emailPhoneTextField.snp.makeConstraints{ + $0.top.equalTo(self.introLabel.snp.bottom).offset(60) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(21) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing).offset(-21) + $0.height.equalTo(49) + } + + passwordTextField.snp.makeConstraints{ + $0.top.equalTo(self.emailPhoneTextField.snp.bottom).offset(10) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(21) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing).offset(-21) + $0.height.equalTo(49) + } + + loginButton.snp.makeConstraints{ + $0.top.equalTo(self.passwordTextField.snp.bottom).offset(35) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(21) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing).offset(-21) + $0.height.equalTo(44) + } + + newAccountButton.snp.makeConstraints{ + $0.top.equalTo(self.loginButton.snp.bottom).offset(10) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(21) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing).offset(-21) + $0.height.equalTo(44) + } + + findAccountButton.snp.makeConstraints{ + $0.top.equalTo(self.newAccountButton.snp.bottom).offset(15) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(21) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing).offset(-21) + $0.height.equalTo(29) + } + + + } + + + @objc + private func pushToNewAccount(){ + let na = NewAccount() + self.navigationController?.pushViewController(na, animated: true) + } + + @objc + private func presentToCheckAccount(){ + let ca = CheckAccount() + ca.modalPresentationStyle = .fullScreen + self.present(ca, animated: true, completion: nil) // animated : true -> 애니메이션을 보이게 하기; completion : 종료 후에 실행할 작업, closer 활용하기 + + if let answer = emailPhoneTextField.nameTextField.text{ + ca.showText(email: answer) + } + } +} + + diff --git a/secondAssignment/secondAssignment/NewAccount.swift b/secondAssignment/secondAssignment/NewAccount.swift new file mode 100644 index 0000000..aed692e --- /dev/null +++ b/secondAssignment/secondAssignment/NewAccount.swift @@ -0,0 +1,119 @@ +// +// NewAccount.swift +// secondAssignment +// +// Created by saint on 2022/10/11. +// + +import UIKit + +class NewAccount: UIViewController { + + private let startLabel: UILabel = { + let label = UILabel(frame: CGRect(x: 90, y: 120, width: 400, height: 40)) + label.text = "카카오톡을 시작합니다" + label.font = .systemFont(ofSize: 24, weight: .bold) + return label + }() + + private let emailPhoneTextField: KakaoCustomView = { + let textField = KakaoCustomView(frame: CGRect(x: 45, y: 250, width: 300, height: 40)) + return textField + }() + + private let passwordTextField: KakaoCustomView = { + let textField = KakaoCustomView(frame: CGRect(x: 45, y: 300, width: 300, height: 40)) + return textField + }() + + private let passwordCheckTextField: KakaoCustomView = { + let textField = KakaoCustomView(frame: CGRect(x: 45, y: 350, width: 300, height: 40)) + return textField + }() + + private func config(){ + emailPhoneTextField.dataBind(placeholder: "이메일 또는 전화번호") + passwordTextField.dataBind(placeholder: "비밀번호") + passwordCheckTextField.dataBind(placeholder: "비밀번호 확인") + } + + private let newAccountButton: UIButton = { + let button = UIButton(frame: CGRect(x: 45, y: 415, width: 300, height: 40)) + button.setTitle("새로운 카카오계정 만들기", for: .normal) + button.setTitleColor(.black, for: .normal) + button.titleLabel?.font = .systemFont(ofSize: 16) + button.backgroundColor = .systemGray5 + button.addTarget(self, action: #selector(presentToCheckAccount), for: .touchUpInside) + return button + }() + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .white + config() + layout() + + let components: [Any] = [startLabel, emailPhoneTextField, passwordTextField, passwordCheckTextField, newAccountButton] + components.forEach{ + view.addSubview($0 as! UIView) + } + } + + @objc + private func presentToCheckAccount(){ + let ca = CheckAccount() + ca.modalPresentationStyle = .fullScreen + self.present(ca, animated: true, completion: { + self.navigationController?.popViewController(animated: true) + }) // animated : true -> 애니메이션을 보이게 하기; completion : 종료 후에 실행할 작업, closer 활용하기 + + if let answer = emailPhoneTextField.nameTextField.text{ + ca.showText(email: answer) + } + + } + +} + +extension NewAccount{ + + private func layout(){ + [startLabel, emailPhoneTextField, passwordTextField, passwordCheckTextField, newAccountButton].forEach{ + view.addSubview($0) + } + + startLabel.snp.makeConstraints{ make in + make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(40) + make.centerX.equalTo(self.view.safeAreaLayoutGuide) + + } + + emailPhoneTextField.snp.makeConstraints{ + $0.top.equalTo(self.startLabel.snp.bottom).offset(116) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(21) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing).offset(-21) + $0.height.equalTo(49) + } + + passwordTextField.snp.makeConstraints{ + $0.top.equalTo(self.emailPhoneTextField.snp.bottom).offset(10) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(21) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing).offset(-21) + $0.height.equalTo(49) + } + + passwordCheckTextField.snp.makeConstraints{ + $0.top.equalTo(self.passwordTextField.snp.bottom).offset(10) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(21) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing).offset(-21) + $0.height.equalTo(49) + } + + newAccountButton.snp.makeConstraints{ + $0.top.equalTo(self.passwordCheckTextField.snp.bottom).offset(26) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(21) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing).offset(-21) + $0.height.equalTo(44) + } + } +} diff --git a/secondAssignment/secondAssignment/SceneDelegate.swift b/secondAssignment/secondAssignment/SceneDelegate.swift new file mode 100644 index 0000000..54af513 --- /dev/null +++ b/secondAssignment/secondAssignment/SceneDelegate.swift @@ -0,0 +1,65 @@ +// +// SceneDelegate.swift +// secondAssignment +// +// Created by saint on 2022/10/11. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + + if let windowScene = scene as? UIWindowScene { + + let window = UIWindow(windowScene: windowScene) + window.overrideUserInterfaceStyle = UIUserInterfaceStyle.light + + let rootVC = LoginMenu() + let navigationController = UINavigationController(rootViewController: rootVC) + + window.rootViewController = navigationController + window.makeKeyAndVisible() + self.window = window + } + } + + 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. + } + + +} + From 3fe709296e56ce1d4d44401835e757b5d974d032 Mon Sep 17 00:00:00 2001 From: BaeSungho Date: Fri, 14 Oct 2022 03:43:36 +0900 Subject: [PATCH 6/7] =?UTF-8?q?=EC=B5=9C=EC=A2=85=20=EC=A0=9C=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets.xcassets/aa.imageset/Contents.json | 23 +++ .../Assets.xcassets/aa.imageset/Group 121.png | Bin 0 -> 1408 bytes .../aa.imageset/Group 121@2x.png | Bin 0 -> 2899 bytes .../aa.imageset/Group 121@3x.png | Bin 0 -> 4172 bytes .../project.pbxproj | 12 ++ .../settings 1.imageset/Contents.json | 23 +++ .../settings 1.imageset/settings 1.png | Bin 0 -> 523 bytes .../settings 1.imageset/settings 1@2x.png | Bin 0 -> 1207 bytes .../settings 1.imageset/settings 1@3x.png | Bin 0 -> 1997 bytes .../Contents.json" | 6 + .../Contents.json" | 23 +++ .../friendtab_profileImg.png" | Bin 0 -> 2049 bytes .../friendtab_profileImg@2x.png" | Bin 0 -> 4613 bytes .../friendtab_profileImg@3x.png" | Bin 0 -> 7858 bytes .../Contents.json" | 6 + .../profile_userImg.imageset/Contents.json" | 23 +++ .../profile_userImg.png" | Bin 0 -> 3544 bytes .../profile_userImg@2x.png" | Bin 0 -> 8702 bytes .../profile_userImg@3x.png" | Bin 0 -> 15718 bytes .../Contents.json" | 6 + .../profileTalkImg.imageset/Contents.json" | 23 +++ .../profileTalkImg.png" | Bin 0 -> 334 bytes .../profileTalkImg@2x.png" | Bin 0 -> 556 bytes .../profileTalkImg@3x.png" | Bin 0 -> 777 bytes .../Contents.json" | 6 + .../profile_editImg.imageset/Contents.json" | 23 +++ .../profile_editImg.png" | Bin 0 -> 349 bytes .../profile_editImg@2x.png" | Bin 0 -> 644 bytes .../profile_editImg@3x.png" | Bin 0 -> 877 bytes .../Contents.json" | 6 + .../profileStoryImg.imageset/Contents.json" | 23 +++ .../profileStoryImg.png" | Bin 0 -> 370 bytes .../profileStoryImg@2x.png" | Bin 0 -> 618 bytes .../profileStoryImg@3x.png" | Bin 0 -> 884 bytes .../Contents.json" | 6 + .../profile_closeBtn.imageset/Contents.json" | 23 +++ .../profile_closeBtn.png" | Bin 0 -> 224 bytes .../profile_closeBtn@2x.png" | Bin 0 -> 289 bytes .../profile_closeBtn@3x.png" | Bin 0 -> 380 bytes .../secondAssignment/CheckAccount.swift | 3 +- .../secondAssignment/FriendList.swift | 89 ++++++++++ .../secondAssignment/NewAccount.swift | 1 - .../secondAssignment/ProfileScreen.swift | 157 ++++++++++++++++++ .../secondAssignment/TouchButtonView.swift | 68 ++++++++ 44 files changed, 548 insertions(+), 2 deletions(-) create mode 100644 first_assignment/first_assignment/Assets.xcassets/aa.imageset/Contents.json create mode 100644 first_assignment/first_assignment/Assets.xcassets/aa.imageset/Group 121.png create mode 100644 first_assignment/first_assignment/Assets.xcassets/aa.imageset/Group 121@2x.png create mode 100644 first_assignment/first_assignment/Assets.xcassets/aa.imageset/Group 121@3x.png create mode 100644 secondAssignment/secondAssignment/Assets.xcassets/settings 1.imageset/Contents.json create mode 100644 secondAssignment/secondAssignment/Assets.xcassets/settings 1.imageset/settings 1.png create mode 100644 secondAssignment/secondAssignment/Assets.xcassets/settings 1.imageset/settings 1@2x.png create mode 100644 secondAssignment/secondAssignment/Assets.xcassets/settings 1.imageset/settings 1@3x.png create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (2)/Contents.json" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (2)/friendtab_profileImg.imageset/Contents.json" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (2)/friendtab_profileImg.imageset/friendtab_profileImg.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (2)/friendtab_profileImg.imageset/friendtab_profileImg@2x.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (2)/friendtab_profileImg.imageset/friendtab_profileImg@3x.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (3)/Contents.json" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (3)/profile_userImg.imageset/Contents.json" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (3)/profile_userImg.imageset/profile_userImg.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (3)/profile_userImg.imageset/profile_userImg@2x.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (3)/profile_userImg.imageset/profile_userImg@3x.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/Contents.json" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/profileTalkImg.imageset/Contents.json" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/profileTalkImg.imageset/profileTalkImg.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/profileTalkImg.imageset/profileTalkImg@2x.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/profileTalkImg.imageset/profileTalkImg@3x.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/Contents.json" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/profile_editImg.imageset/Contents.json" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/profile_editImg.imageset/profile_editImg.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/profile_editImg.imageset/profile_editImg@2x.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/profile_editImg.imageset/profile_editImg@3x.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/Contents.json" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/Contents.json" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/profileStoryImg.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/profileStoryImg@2x.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/profileStoryImg@3x.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (7)/Contents.json" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (7)/profile_closeBtn.imageset/Contents.json" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (7)/profile_closeBtn.imageset/profile_closeBtn.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (7)/profile_closeBtn.imageset/profile_closeBtn@2x.png" create mode 100644 "secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (7)/profile_closeBtn.imageset/profile_closeBtn@3x.png" create mode 100644 secondAssignment/secondAssignment/FriendList.swift create mode 100644 secondAssignment/secondAssignment/ProfileScreen.swift create mode 100644 secondAssignment/secondAssignment/TouchButtonView.swift diff --git a/first_assignment/first_assignment/Assets.xcassets/aa.imageset/Contents.json b/first_assignment/first_assignment/Assets.xcassets/aa.imageset/Contents.json new file mode 100644 index 0000000..b497b54 --- /dev/null +++ b/first_assignment/first_assignment/Assets.xcassets/aa.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 121.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 121@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 121@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/first_assignment/first_assignment/Assets.xcassets/aa.imageset/Group 121.png b/first_assignment/first_assignment/Assets.xcassets/aa.imageset/Group 121.png new file mode 100644 index 0000000000000000000000000000000000000000..2bc8274a59d1997508dac092567fb82c0430a655 GIT binary patch literal 1408 zcmb7^`#aMM9LK+7Zlg8j5~nbZPFL20nOls}+?M2inbqo0YNj|O!pL>2Id#fq&9xK< z+j%&mWXz>{vNGmwc3d*aWyo#O(Xah*p69%u*ZcE+KJP!^o#}x)wF{yR0RUi^GZy2y zlY|{(73FuXQs^S_dyujI*8xCz?{|ZMe8#?=5_H}3ls!<*+ds4OfJ4#lXaHc}RsMQT z4gloToiS*ySkN59#!KHB*7=hoIBjG=l~;oZQQUgwkfJ>aKKds zN~9U0@2fuCt##6|I%|6Uqr}PIhEx$+e`|rpE0}rKz3J;~F4!U~!JQ~@F3lEq`gDvO z(Q0^jc*CNF-YNs*{(mMkpcrpKZU3x$!zd}5M8e&OkMGsh(J>9~H=duLH@cldrUD}J z#U1reFV8gw8MRlq>%m}bKezC@fX>IBGZ++bs;nr?wDEzw!!MxM*;M&*$gU_dS#2C_>Y@{t}!A7#moKNKkUl z2>{6W-vZv|b=*_rldSLg0MuK#Q)TTcoaDehyj~SRe^K8?<>1vaG04`{OxX;<<0 z^Na1#BWdy>NxG~y&K4_^43$@xvXu+Dtfl z>e>dlWW7uFkkht6;O(=zRBQ0I8)3NhkA<~ULV3@dv5}Fm+V={*y<_3h*XCG|2`Q8$>D$Y5V>62d2ai>3ARt^)79jJmfiXcRWL# zT`1U4T*%T(llzel4G@b#s5^SjEa!Ec`qYg%b2Z3gB70zdX=!Ph62HVvFI5V>Y^vRL z=*je+HglzYJdqA{dgpU>w(EHHw>VMSZAd zX0qDkFXrBGTM6X;zI}XZ#mU1CMuqr>ClfwDQ*+x9a z(8cYrhpuJk*rJ=%@P&t+Wd~9$Dwv&>t({rkI0+F4bMZAvS6NwEYhd`K%!qlxn4YC^ z_nrt zrq2!bN$3+Mah1_(=~2Cx>u}6CH&<$cG5F8isl^QfA~!E_NKyX%)##zQh}MHwRDo>? z#B$HI^$wT@j?9uR522(WX-Jeq@(N5h!XOpolgcgWpJQsRbr+)+aYM-Z6De2On&?k_ zf;BdIG|Agae5SB~))BHLmA3ZW^u%q8V{z8^RZ&;3dk}&rMhN3? zuhgeO&8r=F?^|+zS4y)ds_M$8j0e}{??omzklR8=Tx1g?E5R(F?Z2UBM^fMuA!)lb U@_P}~w>yIgI6LAn)%FC+zja8Jf&c&j literal 0 HcmV?d00001 diff --git a/first_assignment/first_assignment/Assets.xcassets/aa.imageset/Group 121@2x.png b/first_assignment/first_assignment/Assets.xcassets/aa.imageset/Group 121@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e693a9c52f7551106a2a96b2810578dbe220f1aa GIT binary patch literal 2899 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 literal 0 HcmV?d00001 diff --git a/first_assignment/first_assignment/Assets.xcassets/aa.imageset/Group 121@3x.png b/first_assignment/first_assignment/Assets.xcassets/aa.imageset/Group 121@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..99e2299f695761d9a18362023e560116af72153f GIT binary patch literal 4172 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 literal 0 HcmV?d00001 diff --git a/secondAssignment/secondAssignment.xcodeproj/project.pbxproj b/secondAssignment/secondAssignment.xcodeproj/project.pbxproj index e5f0678..203374b 100644 --- a/secondAssignment/secondAssignment.xcodeproj/project.pbxproj +++ b/secondAssignment/secondAssignment.xcodeproj/project.pbxproj @@ -7,6 +7,9 @@ objects = { /* Begin PBXBuildFile section */ + 85B29DE928F8355C004D8B55 /* ProfileScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85B29DE828F8355C004D8B55 /* ProfileScreen.swift */; }; + 85B29DEB28F86906004D8B55 /* TouchButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85B29DEA28F86906004D8B55 /* TouchButtonView.swift */; }; + 85EC949228F8220D00130CB2 /* FriendList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85EC949128F8220D00130CB2 /* FriendList.swift */; }; 85ECE4B828F5787100050B6F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85ECE4B728F5787100050B6F /* AppDelegate.swift */; }; 85ECE4BA28F5787100050B6F /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85ECE4B928F5787100050B6F /* SceneDelegate.swift */; }; 85ECE4BC28F5787100050B6F /* LoginMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85ECE4BB28F5787100050B6F /* LoginMenu.swift */; }; @@ -20,6 +23,9 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 85B29DE828F8355C004D8B55 /* ProfileScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileScreen.swift; sourceTree = ""; }; + 85B29DEA28F86906004D8B55 /* TouchButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TouchButtonView.swift; sourceTree = ""; }; + 85EC949128F8220D00130CB2 /* FriendList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendList.swift; sourceTree = ""; }; 85ECE4B428F5787100050B6F /* secondAssignment.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = secondAssignment.app; sourceTree = BUILT_PRODUCTS_DIR; }; 85ECE4B728F5787100050B6F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 85ECE4B928F5787100050B6F /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -74,6 +80,9 @@ 85ECE4BB28F5787100050B6F /* LoginMenu.swift */, 85ECE4D028F57A7C00050B6F /* NewAccount.swift */, 85ECE4D228F57AA100050B6F /* CheckAccount.swift */, + 85EC949128F8220D00130CB2 /* FriendList.swift */, + 85B29DE828F8355C004D8B55 /* ProfileScreen.swift */, + 85B29DEA28F86906004D8B55 /* TouchButtonView.swift */, ); path = secondAssignment; sourceTree = ""; @@ -158,9 +167,12 @@ 85ECE4D328F57AA100050B6F /* CheckAccount.swift in Sources */, 85ECE4D128F57A7C00050B6F /* NewAccount.swift in Sources */, 85ECE4BC28F5787100050B6F /* LoginMenu.swift in Sources */, + 85B29DEB28F86906004D8B55 /* TouchButtonView.swift in Sources */, + 85EC949228F8220D00130CB2 /* FriendList.swift in Sources */, 85ECE4CF28F57A1C00050B6F /* KakaoCustomView.swift in Sources */, 85ECE4B828F5787100050B6F /* AppDelegate.swift in Sources */, 85ECE4BA28F5787100050B6F /* SceneDelegate.swift in Sources */, + 85B29DE928F8355C004D8B55 /* ProfileScreen.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/secondAssignment/secondAssignment/Assets.xcassets/settings 1.imageset/Contents.json b/secondAssignment/secondAssignment/Assets.xcassets/settings 1.imageset/Contents.json new file mode 100644 index 0000000..87e1c3e --- /dev/null +++ b/secondAssignment/secondAssignment/Assets.xcassets/settings 1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "settings 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "settings 1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "settings 1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/secondAssignment/secondAssignment/Assets.xcassets/settings 1.imageset/settings 1.png b/secondAssignment/secondAssignment/Assets.xcassets/settings 1.imageset/settings 1.png new file mode 100644 index 0000000000000000000000000000000000000000..c7904382fe65e0ec539b6a1affbfad382b9cc9c1 GIT binary patch literal 523 zcmV+m0`&cfP)I|B@gx(L9K{W|?Z|K7m&EbzoOi&>(4(Tv z%6DPFzUqc5yQqLqVrQ@bHh<*Zor1?;UFA)%r}r7wG+@CsY=U>H=y(}+C5$6**O56e zZVA_qdz~(H5-=QUW+5>1e&C+jau#WZA;j+U^kYtcMdnv21Dn4UF=Pdkz&$HYdwU?Z z7wn0<=tgYsLg>l-7PQ4?e((86BT(Tkd{>!eT-QMU0Bvs zCrYX-hMb;>{pSAymOKb47_H*SRf&TOU-sTkLl2EQ<|Z`t%wDy0ebK*yg!+h&Cd8JNL|?F=G^$$N=@Y3c z`V~T=P3!#LoZEMM-MMe(-Ivxc`Q;|>oS8H4%$ak}3{V-I6OIUHWBe+-hzei{vg4%i zo^V|FHYN*{M}?2E$hZXKy?qI?{VKbPj9BWZw>(9*Nx$6*vL5}ef*qCE)qkuAB={Tzw-ij ztARz%(%G#BhG4p+8klm+bj3U8p37Wq;&Or6U}4-eM)uyJ{v zqSv81hf;J3Z5TV82QYPcQU}#r^v_2Y>56c%=PmMjm9r%G3m@wIVP%|)k7!JF!QPs! zRUK}r%Rvi4&oV?NEaMn1EX6#C-(qWGV_xXOY4m__B}$`72cLmIF6!8`4!Tt^b)Qb* z?V&KR6YjXJW6EjEYIN*%k1<@^tZU;O#YX+UfcmFDcIDWFV!fva&Z-fH3mcQ2Fk3dHI{agSWv)PV`cVdM z=-{>#9eRgbIR<;1HxB!DhiFyZc6g!zMNh49(C6W365c_vac1?Qmt7lg+L}?@P6%`m zJ+T=Jhix#|^bt5-MR>8IH(RjqXja>~Qi{AT)BTHmU7mJP4Sh>H=)Y!Q6wQ zmp0B3y`4_!!o8mzLvRcDXf~||g9II321irope(841TYzfJM;#QFL+tN=7FABkszy5 z*+XPRmJUC}q<(iL$ad@ZBQjz+vV(5{r(im*d`woO->3Lbz}(22LcAg2;X8*4;4h9x VQvTcPPC5Vp002ovPDHLkV1fh0Fj@cr literal 0 HcmV?d00001 diff --git a/secondAssignment/secondAssignment/Assets.xcassets/settings 1.imageset/settings 1@3x.png b/secondAssignment/secondAssignment/Assets.xcassets/settings 1.imageset/settings 1@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a0f930cd73f364dfef6df85c39c143cc2c9c86f7 GIT binary patch literal 1997 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 literal 0 HcmV?d00001 diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/Contents.json" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/Contents.json" new file mode 100644 index 0000000..73c0059 --- /dev/null +++ "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/Contents.json" @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/profileTalkImg.imageset/Contents.json" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/profileTalkImg.imageset/Contents.json" new file mode 100644 index 0000000..6bbd924 --- /dev/null +++ "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/profileTalkImg.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "profileTalkImg.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "profileTalkImg@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "profileTalkImg@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/profileTalkImg.imageset/profileTalkImg.png" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/profileTalkImg.imageset/profileTalkImg.png" new file mode 100644 index 0000000000000000000000000000000000000000..0201256dfbd8e51604d4983e85091b5e50840598 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^qChOd!3HFgyvvM%6lZ})WHAE+w=f7ZGR&GI0Tg5` z4sv&5Sa(k5C6L3C?&#~tz_78O`%fY(kpI}z#WAFUaqE0#TwA!XxklsNt3(aH z@(lHfVj}z}&BTL!3oml6UH_Cn>D7J7x-I_=*2eqaY0y5t@K;3fp4031CmnM-d3s{Q zri)1hKMW-M3lgNH?sn$x|9pK>yZ b{S!;ngmeLpk0FPF-evG~^>bP0l+XkKKI?zd literal 0 HcmV?d00001 diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/profileTalkImg.imageset/profileTalkImg@2x.png" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (4)/profileTalkImg.imageset/profileTalkImg@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..e087fefe392762cf170076a2ed95293a500a47c1 GIT binary patch literal 556 zcmV+{0@MA8P)JQa10t8GSWj1y~v8?4tGqtFwj;`Zjn?N#R^&bpQ=c1NheErH!G7X z(o0kgH}p#PP02bko}Yv3E2uGQXx@F!6{EU# z8$$mIJGsBnJS))^iu}f~?n-MkrD^#l$sOBN;dr`tQ;J{Rb_U$9a`q@O_sM5@Jf!o7 zHs%%$1`Yj90-dNVq^|6-33dV~8l^X3UcImNil;vSq!oQr21&1i=;^aCXydQVh*l6IO(B zgQkf2SJn&v0}|MT7-ikDR@5CE)~`iMM#$(XwB z#!YxYSCAditztvxj5=k%-38f?1mq5Fq0I1_hDG!4PQx^;sWcwcn3l!CEr!dC7d6Y` zn^#q5v*BMDwqfCseT<85mPVRSoN=>&8>Fl+`E~q3q$wNryPNm=Cq%)|L8RIAGdJJh z9#g$(d1qQhc>^~|*z{BmirqVgyF{cmDf>t}9%aog+WAQTfcr?aM|sl|_`z(~y*=sL znm;Zbhb2qzT+) zt`Exc-XS-C(XK$oHl8`4_xi=b+FMOubGSo_f}hH}mJZ$Nm=?>ij_tA}B|P-y>HOsS zGx>c}R?9I&Vl;(@X*@pWsWyqA2DVoWho5}S@v##=!HjFzPs;kLR+dLGO&8fdXFnmU zHZU4^O(Siq=>!c%Xrt0+85v*~37SktirPq1R=;fnlE+I}Pime(FNfJ_00000NkvXX Hu0mjfm27Ad literal 0 HcmV?d00001 diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/Contents.json" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/Contents.json" new file mode 100644 index 0000000..73c0059 --- /dev/null +++ "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/Contents.json" @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/profile_editImg.imageset/Contents.json" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/profile_editImg.imageset/Contents.json" new file mode 100644 index 0000000..9fa2672 --- /dev/null +++ "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/profile_editImg.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "profile_editImg.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "profile_editImg@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "profile_editImg@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/profile_editImg.imageset/profile_editImg.png" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/profile_editImg.imageset/profile_editImg.png" new file mode 100644 index 0000000000000000000000000000000000000000..6560a9bef3d8851d883e5cd8f042fa94776d8577 GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz0!3HD`IPL*aoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{wGft$B+ufty6jhn+$kbPtRpGXp%m`(RYB& zf=T)S+m6P(0~|n>0h5Iz&o3M2l}j0G%is5zy}Z6(Bsr|3PZw_Rnsfcloef1?QHtuK9(ot& z&6zzTr?Ql(%3_JfU zX&&Z#Tc@n)ynRwUUbpjyCQI0lb@iI>q%QRQ<2=LuWFOCl)fZ2&hFqPsRQC5dyNKJT sZZKQ-F3K>F>P%O;I`JF-AAMT}eY1~okJ>i?!-;{x)78&qol`;+06Jic{Qv*} literal 0 HcmV?d00001 diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/profile_editImg.imageset/profile_editImg@2x.png" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (5)/profile_editImg.imageset/profile_editImg@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..54fa43785e0124a8357fc4cf55e5b1584ccc4108 GIT binary patch literal 644 zcmV-~0(YaGd@aBC2W5_wcNCCCsvFa&2XHt3~q4v~#%UywCc zyZ*m~v0w<;*gMZ>CTliI$PM#iJ2NM;3Da*nDnaIjm9OYc|D!{24botUHKD~${dV?% zKoWY|m?=UG)H72Ge}e)^n7Zmh6)?4Sjc!2-*jE2FnPLdeI*3)F1BoS8IwX|!Y=s^@ z!*(e&qY$(Dbm|$lcMF-F0^91p^YrEPERTFppt%$H6yU?@S!c$F5_4Bpg^c=l_)eIq z+<*iyab+__(^cT~zBrRh6S0DjwuPhbmU#9r?1y@$!s4t$Z#29ia!Y_}OS$Kc}FvV_X`J3z& zgb_^+&+?$NbP?8?Y(ZD3KOl@Ka)#J}Y-*ZnvS%VzLk7fV?hF2j=}f)kBBl{c&aC7o ztLdGH^?nYf;1SLlxIiCsx~@K_*8h)DuIcf-r#2W41!DsFy9^h40P?qu9u#m*Qp*E- e_R3lKUHAo5?*{Js0coEA0000b~>o;g?{5u zk|hW%8lYd-Zgp%X9GjKU{m6NvbuaWgq>?Ow959X(&mXIMrLmeUfqd;bCxfaZ=#jdQ zZN~x$t|RCjihs0Z2@(bj=&8vzmm+b%KxVmgQcLAZ+tQ808P+Wr1h!NHZLhaz2(+D5 zE^Sf?_4cJ)T9GA)*isSfOZBvQE|nfQMTv~5S4@Z_Nh71OV$5@C(#VM6{*hx+Jsk}L zp?Ty|$Ssv9O=x76OVyUjOxs!I(n&3q8TL=Hktitu8RgP@!I3B_ z0CFyE$r2=Z;MB8Ur~Dy99MN)JNi#u4xzwU)NM=8VBe7a4n=FKSXQY-&MG;W!o9EJ` zxlXaaB}@GB8lt5LAeUU~ovGf0Q18%?*otO?Typ6%lDt!aF1kJr4E^Hm3oS%+v5;R5 zx$ssOMPdIUhbOAoXF|)~(1o{8OTX72duG4WYoTr?Kj-iPLo~5GtL_^8FfjCuh1x%O z8X`tC&Mw7B%oV#Dp^iCXm0WtD40$i?uQBaTWazylmrL{f5(9E=d<|z<->!uMxs`ca zLLCVIV5m<%uclAI3qBy6(<)|^DTa0iIRCU{tsBZ8eLo#Gi&Xp(00000NkvXXu0mjf D&bWrX literal 0 HcmV?d00001 diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/Contents.json" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/Contents.json" new file mode 100644 index 0000000..73c0059 --- /dev/null +++ "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/Contents.json" @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/Contents.json" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/Contents.json" new file mode 100644 index 0000000..e4fac26 --- /dev/null +++ "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "profileStoryImg.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "profileStoryImg@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "profileStoryImg@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/profileStoryImg.png" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/profileStoryImg.png" new file mode 100644 index 0000000000000000000000000000000000000000..9a14a9bdfe40d2cdc49def905a05c574af532738 GIT binary patch literal 370 zcmV-&0ge8NP)lKu6FG*g%{BH$W%A4P*mwg8C261W7Gz#l)ZdKzr@W7LLhJ4>(myRl~px-oXj^D}qa71es>=kvxSxF|19o8T~-PP^sl=Qm80G1xhZ( zBv61hcw}$`7kzLLvZ|}Vi)B=nJn0aOD40MHh0bQWp zz%ghL&;|_#eu91lG(lZ~d>`T373!3swzNJDCIaHdu$1@Ml3_06)+VNsg=;+cx5CXK z$M^i2XLtc$F_jF~vd)-q$R^&vb%G1Yq#ivKgXV+rjk=CgN!ArIxzIo836~?X;doV+ Qk^lez07*qoM6N<$f**H|l>h($ literal 0 HcmV?d00001 diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/profileStoryImg@2x.png" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/profileStoryImg@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b8408c6906f10a81be02cdf98c62c4301c18a652 GIT binary patch literal 618 zcmV-w0+s!VP)IBFHzy>%0Y=9fk4S)&adp0?rrEStSFF8HFyIh*~ zYx2uW+Z>Msn3Pf}Rw>BqlqAV#r#lD^%T|TeRtLqZL_;1ROa!aiVMHf3Q-XjQ)_dJv zVA+7Y9wYm{<%$8sb0aO_?wfS%059kW%OSce5^o?9ojW11MGe?2cZ}ZgE zA9cCa&n7Z&^Tk?jvjuOV+(hV;G{Oi!*LkBvvI1x{#q-NLe{jeez&9vgB2qnQ$Q?&N zg9kQV&aSQ4`6a}FYy-4{hJbVdYz38u>;lN{*)xA83fU8I#{6_|DhBBdP+#y4=@n1{ z(mSAUND)AvkYa$oAVmRvK#Btng$x2X1Tq+4U&x?|^6|$px7Ka&@V^GUKcbuqlG-_wSX9F~C9JX%?If0Tpb z;b27*Ak;*VS=PEgE^05(w}YW#5k59tpEX6$r)&wU5d(UKGBt9iYg0%CTt+aA5NxCD z5{sabEs~UxePHbZ%IAsBpLKg>{fk3ds{D?oaMeH17iSePYF=Rb&;S4c07*qoM6N<$ Ef?fsu>Hq)$ literal 0 HcmV?d00001 diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/profileStoryImg@3x.png" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (6)/profileStoryImg.imageset/profileStoryImg@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..a42afe21ecc4a2b5bd98d258afbdf9e300ba1c02 GIT binary patch literal 884 zcmV-)1B?8LP)1^@s6z=&pM00009a7bBm001F4 z001F40Y#QEU;qFB0drDELIAGL9O(c600d`2O+f$vv5yP=Hcr2-a?@?Lpiibj7FNDu;4k1S21cu^JaSUo(pDsxE|5-y>$#<;+ zy((dV&ftUT1pMB00!~1K2GkUR3wRr;?|4QjeVji*Vv;HItC@d&VU3dg4Tr!QB|T`F zCqhow@}#)%akL*T5fYHVZmoJh_km8bh2>fQKkUD^o3f)Vog8orY^|fvNdb4jme${$ z(8&OI!2aU&9roYfyIWfOpw%!y)mk|=_s;p|flM=SA6UosIJ8z^A6Uny8(Jf92(07V z4y_G%2&@z10J=VjT7buZwPG#YAoU5<06a2mPP_lW>TKaTU`fkwcve_3!dSqw!-^rs z0FDAH#yB@{G+1%KIf0|XiWANS93561aSmV=u;PqU1FM0R05~PEDp(1EQvs`kl|VQJ zuu517hGPS(g_VFfCa`K)35sI@tA~}qI0kSMuo4`H0w)727r-IFNx{lRFcdgBSh)~} z0LO%-A*%&LfMdZrwm~auy@4ri%U(IQIe5tX>mhY~#mlm+01ruJ%?-}2;)>G`j1Td&0zxS(#`wAd{@uF-2W=KL-7*9Jnx&g+iAC^jpn{Gw-UpLrIk zpB~9`N@}XuiViDgw3PEVPI=xV=FoYT8hket_@tG!Rnp2<^&SW=FZgiz>db-;QQ!bY zhl3+D)n{^%v-{ZOak4GKIg7giSvgcmZK7qY~j z>?~n^%yQ%3!V5(cOiUK)HwJlXu4Uj8-07gR_I^pV&P`Ll-cHB)QEcKG)&(28mF~Eh z`Ye{;r)*LowpV+<+~3fx=B9;LIK++bY8UvQF19(uCN^WH;&rL!X?ptC?!SL2`0mRS QpaU2@UHx3vIVCg!084X68~^|S literal 0 HcmV?d00001 diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (7)/profile_closeBtn.imageset/profile_closeBtn@2x.png" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (7)/profile_closeBtn.imageset/profile_closeBtn@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..7418e88790e64f98ddc7cf74a8989d7276fc22dd GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1|*Ak?@s|zoCO|{#S9E$svykh8Km+7D9BhG zPk}JdM6w zlUlG@>ZOL*G&^3`g!#FPJ#t=|boKHHxjANppVsKuTiE4vp(9r0(7ONPZ@Z4NNM3jx h9`gT{`InsQ`S&9q?obxGnh*2=gQu&X%Q~loCIIwxZqNV# literal 0 HcmV?d00001 diff --git "a/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (7)/profile_closeBtn.imageset/profile_closeBtn@3x.png" "b/secondAssignment/secondAssignment/Assets.xcassets/\354\204\270\353\257\270\353\202\230 \354\236\220\353\243\214 (7)/profile_closeBtn.imageset/profile_closeBtn@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..90091d5efb37e6c8d485a654f258cd4f1d9fd5fd GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{b+9I14-?iy0UcEkKyjb(&!UP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBIYCbs$B+ufv)4WOnhgY44g}iC)d|(z5)_&i z)hD~>%rznQoDWwR^*dB}8@`urm9n3tvVHlJyIDNP!{%wHzqDA@XOJWA$={MJKk-X~ zM45!A{*L736Td8yE|c_Ro{_wLqR9lwFkVmQRmoQ;nrx7|#^cGlZR0Z!tt~yJ&Orw= z*H};D;!i$2fu-U|n=nrEpHke^y3Dk2 z!VCE|-Ane#MDXZ1K8)~LGdVFrN9WnQh@3YTc@Y{p-OnO4-rY@$kdQIBveCeXb!Fni zf{@$C4t=!Q+4I#U=&WT9%cQLSMCFMoKl;x$sCdgqm(CNKBlt$sGboY& 애니메이션을 보이게 하기; completion : 종료 후에 실행할 작업, closer 활용하기 + } + +} + + +extension FriendList{ + + private func layout(){ + [friendLabel, setButton, profileButton].forEach{ + view.addSubview($0) + } + + friendLabel.snp.makeConstraints{ make in + make.top.equalToSuperview().offset(56.adjusted) + make.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(14.adjusted) + } + + setButton.snp.makeConstraints{ + $0.top.equalToSuperview().offset(57.adjusted) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(57.adjusted) + $0.width.equalTo(21.adjusted) + $0.height.equalTo(21.adjusted) + } + + profileButton.snp.makeConstraints{ + $0.top.equalToSuperview().offset(108.adjusted) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(14.adjusted) + $0.width.equalTo(59.adjusted) + $0.height.equalTo(58.adjusted) + } + } + + private func configButton() { + setButton.setBackgroundImage(UIImage(named: "settings 1"), for: .normal) + profileButton.setBackgroundImage(UIImage(named: "friendtab_profileImg"), for: .normal) + } +} + diff --git a/secondAssignment/secondAssignment/NewAccount.swift b/secondAssignment/secondAssignment/NewAccount.swift index aed692e..35d74a4 100644 --- a/secondAssignment/secondAssignment/NewAccount.swift +++ b/secondAssignment/secondAssignment/NewAccount.swift @@ -70,7 +70,6 @@ class NewAccount: UIViewController { if let answer = emailPhoneTextField.nameTextField.text{ ca.showText(email: answer) } - } } diff --git a/secondAssignment/secondAssignment/ProfileScreen.swift b/secondAssignment/secondAssignment/ProfileScreen.swift new file mode 100644 index 0000000..7e261e3 --- /dev/null +++ b/secondAssignment/secondAssignment/ProfileScreen.swift @@ -0,0 +1,157 @@ +// +// ProfileScreen.swift +// secondAssignment +// +// Created by saint on 2022/10/13. +// + +import UIKit +import SnapKit + +class ProfileScreen: UIViewController { + + private lazy var deleteButton: UIButton = { + let button = UIButton() + button.backgroundColor = .clear + button.addTarget(self, action: #selector(touchupDeleteButton), for: .touchUpInside) + return button + }() + + private lazy var profileButton: UIButton = { + let button = UIButton() + button.backgroundColor = .clear + return button + }() + + private let divisionLine: UIView = { + let view = UIView() + view.backgroundColor = .white + return view + }() + + private let nameLabel: UILabel = { + let label = UILabel() + label.text = "배성호" + label.font = .systemFont(ofSize: 18, weight: .medium) + label.textColor = .white + label.textAlignment = .center + return label + }() + + private let chatButton: TouchButtonView = { + let button = TouchButtonView() + button.backgroundColor = .clear + return button + }() + + private let editProfile: TouchButtonView = { + let button = TouchButtonView() + button.backgroundColor = .clear + return button + }() + + private let kakaoStory: TouchButtonView = { + let button = TouchButtonView() + button.backgroundColor = .clear + return button + }() + + private func config(){ + chatButton.dataBind(text: "나와의 채팅", image: "profileTalkImg") + editProfile.dataBind(text: "프로필 편집", image: "profile_editImg") + kakaoStory.dataBind(text: "카카오스토리", image: "profileStoryImg") + } + + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = UIColor(red: 0.537, green: 0.569, blue: 0.592, alpha: 1.0) + + layout() + configButton() + config() + } + + @objc + private func touchupDeleteButton(){ + self.dismiss(animated: true, completion: nil) + } +} + +extension ProfileScreen{ + + private func layout(){ + [deleteButton, profileButton, divisionLine, nameLabel, chatButton, editProfile, kakaoStory].forEach{ + view.addSubview($0) + } + + deleteButton.snp.makeConstraints{ make in + make.top.equalToSuperview().offset(58.adjusted) + make.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(18.adjusted) + make.width.equalTo(13.adjusted) + make.height.equalTo(14.adjusted) + } + + profileButton.snp.makeConstraints{ + $0.top.equalToSuperview().offset(514.adjusted) + $0.centerX.equalTo(self.view.safeAreaLayoutGuide) + $0.width.equalTo(97.adjusted) + $0.height.equalTo(96.adjusted) + } + + nameLabel.snp.makeConstraints{ + $0.top.equalTo(self.profileButton.snp.bottom).offset(8.adjusted) + $0.centerX.equalTo(self.view.safeAreaLayoutGuide) + } + + divisionLine.snp.makeConstraints{ + $0.top.equalToSuperview().offset(681.adjusted) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing) + $0.height.equalTo(0.4.adjusted) + } + + editProfile.snp.makeConstraints{ + $0.top.equalToSuperview().offset(692.adjusted) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(141.67.adjusted) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing).offset(-140.67.adjusted) + $0.bottom.equalToSuperview().inset(48.adjusted) + } + + chatButton.snp.makeConstraints{ + $0.top.equalToSuperview().offset(692.adjusted) + $0.leading.equalTo(self.view.safeAreaLayoutGuide.snp.leading).offset(49.adjusted) + $0.trailing.equalTo(self.editProfile.snp.leading) + $0.bottom.equalToSuperview().inset(48.adjusted) + } + + kakaoStory.snp.makeConstraints{ + $0.top.equalToSuperview().offset(692.adjusted) + $0.trailing.equalTo(self.view.safeAreaLayoutGuide.snp.trailing).inset(48.adjusted) + $0.leading.equalTo(self.editProfile.snp.trailing) + $0.bottom.equalToSuperview().inset(48.adjusted) + } + } + + private func configButton() { + deleteButton.setBackgroundImage(UIImage(named: "profile_closeBtn"), for: .normal) + profileButton.setBackgroundImage(UIImage(named: "profile_userImg"), for: .normal) + } +} + +extension Int { + var adjusted: CGFloat { + let ratio: CGFloat = CGFloat(UIScreen.main.bounds.width) / 375 + let ratioH: CGFloat = CGFloat(UIScreen.main.bounds.height) / 812 + return ratio <= ratioH ? CGFloat(self) * ratio : CGFloat(self) * ratioH + } +} + +extension Double { + var adjusted: CGFloat { + let ratio: CGFloat = CGFloat(UIScreen.main.bounds.width) / 375 + let ratioH: CGFloat = CGFloat(UIScreen.main.bounds.height) / 812 + return ratio <= ratioH ? CGFloat(self) * ratio : CGFloat(self) * ratioH + } +} + diff --git a/secondAssignment/secondAssignment/TouchButtonView.swift b/secondAssignment/secondAssignment/TouchButtonView.swift new file mode 100644 index 0000000..723b62f --- /dev/null +++ b/secondAssignment/secondAssignment/TouchButtonView.swift @@ -0,0 +1,68 @@ +// +// TouchButton.swift +// secondAssignment +// +// Created by saint on 2022/10/14. +// + +import UIKit +import SnapKit + +class TouchButtonView: UIButton { + + private let infoLabel: UILabel = { + let label = UILabel() + return label + }() + + private let imageContainerView: UIImageView = { + let view = UIImageView() + view.backgroundColor = .clear + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + layout() + + [infoLabel, imageContainerView].forEach { + self.addSubview($0) + } + } + + required init?(coder: NSCoder) { + fatalError("iniaat(coder:) has not been implemented") + } + + func dataBind(text: String, image: String) { + infoLabel.text = text + infoLabel.font = .systemFont(ofSize: 10, weight: .medium) + infoLabel.textColor = .white + infoLabel.textAlignment = .center + imageContainerView.image = UIImage(named: image) + imageContainerView.contentMode = .scaleAspectFit + } +} + +extension TouchButtonView{ + + private func layout(){ + + [infoLabel, imageContainerView].forEach{ + self.addSubview($0) + } + + imageContainerView.snp.makeConstraints{make in + make.top.equalTo(self.snp.top).offset(20.adjusted) + make.centerX.equalTo(self) + make.leading.equalTo(self.snp.leading).offset(38.adjusted) + } + + infoLabel.snp.makeConstraints{ + $0.top.equalTo(self.snp.top).offset(48.adjusted) + $0.centerX.equalTo(self) + $0.leading.equalTo(self.snp.leading).offset(19.31.adjusted) + } + } +} + From e2086a1aba6d913e27215987d5b62ee4b0e2d45e Mon Sep 17 00:00:00 2001 From: BaeSungho Date: Sat, 15 Oct 2022 15:21:43 +0900 Subject: [PATCH 7/7] =?UTF-8?q?=EC=9D=B4=EC=8A=88=20=ED=85=9C=ED=94=8C?= =?UTF-8?q?=EB=A6=BF=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE.md | 9 + .github/PULL_REQUEST_TEMPLATE | 17 + .../contents.xcworkspacedata | 7 + .../thirdSemina.xcodeproj/project.pbxproj | 363 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + thirdSemina/thirdSemina/AppDelegate.swift | 36 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 13 + .../thirdSemina/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../thirdSemina/Base.lproj/Main.storyboard | 24 ++ thirdSemina/thirdSemina/File.swift | 8 + thirdSemina/thirdSemina/FirstVC.swift | 24 ++ thirdSemina/thirdSemina/Info.plist | 25 ++ .../thirdSemina/MusicListViewController.swift | 12 + thirdSemina/thirdSemina/MusicModel.swift | 8 + thirdSemina/thirdSemina/SceneDelegate.swift | 52 +++ thirdSemina/thirdSemina/SecondVC.swift | 12 + 19 files changed, 667 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE create mode 100644 InSopt_First_Semina/InSopt_First_Semina.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 thirdSemina/thirdSemina.xcodeproj/project.pbxproj create mode 100644 thirdSemina/thirdSemina.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 thirdSemina/thirdSemina.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 thirdSemina/thirdSemina/AppDelegate.swift create mode 100644 thirdSemina/thirdSemina/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 thirdSemina/thirdSemina/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 thirdSemina/thirdSemina/Assets.xcassets/Contents.json create mode 100644 thirdSemina/thirdSemina/Base.lproj/LaunchScreen.storyboard create mode 100644 thirdSemina/thirdSemina/Base.lproj/Main.storyboard create mode 100644 thirdSemina/thirdSemina/File.swift create mode 100644 thirdSemina/thirdSemina/FirstVC.swift create mode 100644 thirdSemina/thirdSemina/Info.plist create mode 100644 thirdSemina/thirdSemina/MusicListViewController.swift create mode 100644 thirdSemina/thirdSemina/MusicModel.swift create mode 100644 thirdSemina/thirdSemina/SceneDelegate.swift create mode 100644 thirdSemina/thirdSemina/SecondVC.swift diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..e7cf791 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,9 @@ +## 🛠 Issue + + +## 📋 To-do + +- [ ] todo! + + + diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE new file mode 100644 index 0000000..d052975 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE @@ -0,0 +1,17 @@ +# 🔥 Pull requests +## 🌴 작업한 브랜치 +- # 이슈넘버 적어주세용 + +## ✅ 작업한 내용 +- 작업한 내용 작성하세용 + +## 💁🏻‍♂️ 추가한 기능 +- 추가한 기능 작성하세용 + +## 🧗🏻 추가할 기능 +- 추가해야할 기능 작성하세용 + +## 📸 스크린샷 +스크린샷 첨부해주세용 + +closed #이슈넘버 적어주세용 diff --git a/InSopt_First_Semina/InSopt_First_Semina.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/InSopt_First_Semina/InSopt_First_Semina.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/InSopt_First_Semina/InSopt_First_Semina.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/thirdSemina/thirdSemina.xcodeproj/project.pbxproj b/thirdSemina/thirdSemina.xcodeproj/project.pbxproj new file mode 100644 index 0000000..e90a322 --- /dev/null +++ b/thirdSemina/thirdSemina.xcodeproj/project.pbxproj @@ -0,0 +1,363 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 8557606E28FA7A0E0058D135 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8557606D28FA7A0E0058D135 /* AppDelegate.swift */; }; + 8557607028FA7A0E0058D135 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8557606F28FA7A0E0058D135 /* SceneDelegate.swift */; }; + 8557607228FA7A0E0058D135 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8557607128FA7A0E0058D135 /* ViewController.swift */; }; + 8557607528FA7A0E0058D135 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8557607328FA7A0E0058D135 /* Main.storyboard */; }; + 8557607728FA7A0E0058D135 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8557607628FA7A0E0058D135 /* Assets.xcassets */; }; + 8557607A28FA7A0E0058D135 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8557607828FA7A0E0058D135 /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 8557606A28FA7A0E0058D135 /* thirdSemina.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = thirdSemina.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 8557606D28FA7A0E0058D135 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 8557606F28FA7A0E0058D135 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 8557607128FA7A0E0058D135 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 8557607428FA7A0E0058D135 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 8557607628FA7A0E0058D135 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 8557607928FA7A0E0058D135 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 8557607B28FA7A0E0058D135 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8557606728FA7A0E0058D135 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 8557606128FA7A0D0058D135 = { + isa = PBXGroup; + children = ( + 8557606C28FA7A0E0058D135 /* thirdSemina */, + 8557606B28FA7A0E0058D135 /* Products */, + ); + sourceTree = ""; + }; + 8557606B28FA7A0E0058D135 /* Products */ = { + isa = PBXGroup; + children = ( + 8557606A28FA7A0E0058D135 /* thirdSemina.app */, + ); + name = Products; + sourceTree = ""; + }; + 8557606C28FA7A0E0058D135 /* thirdSemina */ = { + isa = PBXGroup; + children = ( + 8557606D28FA7A0E0058D135 /* AppDelegate.swift */, + 8557606F28FA7A0E0058D135 /* SceneDelegate.swift */, + 8557607128FA7A0E0058D135 /* ViewController.swift */, + 8557607328FA7A0E0058D135 /* Main.storyboard */, + 8557607628FA7A0E0058D135 /* Assets.xcassets */, + 8557607828FA7A0E0058D135 /* LaunchScreen.storyboard */, + 8557607B28FA7A0E0058D135 /* Info.plist */, + ); + path = thirdSemina; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8557606928FA7A0E0058D135 /* thirdSemina */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8557607E28FA7A0E0058D135 /* Build configuration list for PBXNativeTarget "thirdSemina" */; + buildPhases = ( + 8557606628FA7A0E0058D135 /* Sources */, + 8557606728FA7A0E0058D135 /* Frameworks */, + 8557606828FA7A0E0058D135 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = thirdSemina; + productName = thirdSemina; + productReference = 8557606A28FA7A0E0058D135 /* thirdSemina.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 8557606228FA7A0D0058D135 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1400; + LastUpgradeCheck = 1400; + TargetAttributes = { + 8557606928FA7A0E0058D135 = { + CreatedOnToolsVersion = 14.0.1; + }; + }; + }; + buildConfigurationList = 8557606528FA7A0D0058D135 /* Build configuration list for PBXProject "thirdSemina" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 8557606128FA7A0D0058D135; + productRefGroup = 8557606B28FA7A0E0058D135 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8557606928FA7A0E0058D135 /* thirdSemina */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8557606828FA7A0E0058D135 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8557607A28FA7A0E0058D135 /* LaunchScreen.storyboard in Resources */, + 8557607728FA7A0E0058D135 /* Assets.xcassets in Resources */, + 8557607528FA7A0E0058D135 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8557606628FA7A0E0058D135 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8557607228FA7A0E0058D135 /* ViewController.swift in Sources */, + 8557606E28FA7A0E0058D135 /* AppDelegate.swift in Sources */, + 8557607028FA7A0E0058D135 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 8557607328FA7A0E0058D135 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 8557607428FA7A0E0058D135 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 8557607828FA7A0E0058D135 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 8557607928FA7A0E0058D135 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 8557607C28FA7A0E0058D135 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + 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; + GCC_C_LANGUAGE_STANDARD = gnu11; + 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; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 8557607D28FA7A0E0058D135 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + 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; + GCC_C_LANGUAGE_STANDARD = gnu11; + 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; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 8557607F28FA7A0E0058D135 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 5AJPCAS7TS; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = thirdSemina/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + 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 = Saint.thirdSemina; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 8557608028FA7A0E0058D135 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 5AJPCAS7TS; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = thirdSemina/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + 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 = Saint.thirdSemina; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 8557606528FA7A0D0058D135 /* Build configuration list for PBXProject "thirdSemina" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8557607C28FA7A0E0058D135 /* Debug */, + 8557607D28FA7A0E0058D135 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8557607E28FA7A0E0058D135 /* Build configuration list for PBXNativeTarget "thirdSemina" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8557607F28FA7A0E0058D135 /* Debug */, + 8557608028FA7A0E0058D135 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 8557606228FA7A0D0058D135 /* Project object */; +} diff --git a/thirdSemina/thirdSemina.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/thirdSemina/thirdSemina.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/thirdSemina/thirdSemina.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/thirdSemina/thirdSemina.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/thirdSemina/thirdSemina.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/thirdSemina/thirdSemina.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/thirdSemina/thirdSemina/AppDelegate.swift b/thirdSemina/thirdSemina/AppDelegate.swift new file mode 100644 index 0000000..74206ee --- /dev/null +++ b/thirdSemina/thirdSemina/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// thirdSemina +// +// Created by saint on 2022/10/15. +// + +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/thirdSemina/thirdSemina/Assets.xcassets/AccentColor.colorset/Contents.json b/thirdSemina/thirdSemina/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/thirdSemina/thirdSemina/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/thirdSemina/thirdSemina/Assets.xcassets/AppIcon.appiconset/Contents.json b/thirdSemina/thirdSemina/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/thirdSemina/thirdSemina/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/thirdSemina/thirdSemina/Assets.xcassets/Contents.json b/thirdSemina/thirdSemina/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/thirdSemina/thirdSemina/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/thirdSemina/thirdSemina/Base.lproj/LaunchScreen.storyboard b/thirdSemina/thirdSemina/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/thirdSemina/thirdSemina/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdSemina/thirdSemina/Base.lproj/Main.storyboard b/thirdSemina/thirdSemina/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/thirdSemina/thirdSemina/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdSemina/thirdSemina/File.swift b/thirdSemina/thirdSemina/File.swift new file mode 100644 index 0000000..70acac9 --- /dev/null +++ b/thirdSemina/thirdSemina/File.swift @@ -0,0 +1,8 @@ +// +// File.swift +// thirdSemina +// +// Created by saint on 2022/10/15. +// + +import Foundation diff --git a/thirdSemina/thirdSemina/FirstVC.swift b/thirdSemina/thirdSemina/FirstVC.swift new file mode 100644 index 0000000..7a23c36 --- /dev/null +++ b/thirdSemina/thirdSemina/FirstVC.swift @@ -0,0 +1,24 @@ +// +// ViewController.swift +// thirdSemina +// +// Created by saint on 2022/10/15. +// + +import UIKit + +class ViewController: UIViewController { + + private lazy var answerTextField: UITextField = { + let textField = UITextField(frame: CGRect(x: 80, y: 280, width: 250, height: 40)) + textField.borderStyle = .roundedRect + textField.backgroundColor = .systemGray6 + textField.font = .systemFont(ofSize: 18, weight: .medium) + textField.delegate = self + return textField + }() + } + + +} + diff --git a/thirdSemina/thirdSemina/Info.plist b/thirdSemina/thirdSemina/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/thirdSemina/thirdSemina/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/thirdSemina/thirdSemina/MusicListViewController.swift b/thirdSemina/thirdSemina/MusicListViewController.swift new file mode 100644 index 0000000..65e6dcc --- /dev/null +++ b/thirdSemina/thirdSemina/MusicListViewController.swift @@ -0,0 +1,12 @@ +// +// MusicListViewController.swift +// thirdSemina +// +// Created by saint on 2022/10/15. +// + +import UIKit + +class MusicListViewController: NSObject { + +} diff --git a/thirdSemina/thirdSemina/MusicModel.swift b/thirdSemina/thirdSemina/MusicModel.swift new file mode 100644 index 0000000..bb3bea2 --- /dev/null +++ b/thirdSemina/thirdSemina/MusicModel.swift @@ -0,0 +1,8 @@ +// +// MusicModel.swift +// thirdSemina +// +// Created by saint on 2022/10/15. +// + +import Foundation diff --git a/thirdSemina/thirdSemina/SceneDelegate.swift b/thirdSemina/thirdSemina/SceneDelegate.swift new file mode 100644 index 0000000..3b69fdb --- /dev/null +++ b/thirdSemina/thirdSemina/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// thirdSemina +// +// Created by saint on 2022/10/15. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + 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/thirdSemina/thirdSemina/SecondVC.swift b/thirdSemina/thirdSemina/SecondVC.swift new file mode 100644 index 0000000..c450c45 --- /dev/null +++ b/thirdSemina/thirdSemina/SecondVC.swift @@ -0,0 +1,12 @@ +// +// SecondVC.swift +// thirdSemina +// +// Created by saint on 2022/10/15. +// + +import UIKit + +class SecondVC: NSObject { + +}