From c1ff6c596ffce91c2df76690387884d08ccc6f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=ED=83=9C=ED=98=84?= Date: Thu, 5 May 2022 18:44:38 +0900 Subject: [PATCH] [#1] Basic Custom View Session --- .DS_Store | Bin 0 -> 6148 bytes BasicCustomView/.DS_Store | Bin 0 -> 6148 bytes BasicCustomView/Final/.DS_Store | Bin 0 -> 6148 bytes .../Final/BasicCustomView/.DS_Store | Bin 0 -> 6148 bytes .../BasicCustomView.xcodeproj/project.pbxproj | 495 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../Application/AppDelegate.swift | 36 ++ .../Application/SceneDelegate.swift | 19 + .../Bottom Sheet/BottomSheet.storyboard | 224 ++++++++ .../Bottom Sheet/BottomSheet.swift | 25 + .../Views/CustomBottomSheet.swift | 57 ++ .../Main/Base.lproj/Main.storyboard | 61 +++ .../BasicCustomView/Main/ViewController.swift | 16 + .../BasicCustomView/Pop Up/PopUp.storyboard | 156 ++++++ .../BasicCustomView/Pop Up/PopUp.swift | 24 + .../Pop Up/Views/CustomPopUp.swift | 43 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 ++++ .../Resources/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../Supporting Files/Info.plist | 25 + .../View Pager/ViewPager.storyboard | 178 +++++++ .../View Pager/ViewPager.swift | 23 + .../View Pager/Views/CustomViewPager.swift | 140 +++++ .../Views/FirstViewController.swift | 17 + .../Views/SecondViewController.swift | 17 + .../Views/ThirdViewController.swift | 17 + BasicCustomView/Starter/.DS_Store | Bin 0 -> 6148 bytes .../Starter/BasicCustomView/.DS_Store | Bin 0 -> 6148 bytes .../BasicCustomView.xcodeproj/project.pbxproj | 483 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../Application/AppDelegate.swift | 36 ++ .../Application/SceneDelegate.swift | 19 + .../Bottom Sheet/BottomSheet.storyboard | 76 +++ .../Bottom Sheet/BottomSheet.swift | 17 + .../Views/CustomBottomSheet.swift | 17 + .../Main/Base.lproj/Main.storyboard | 61 +++ .../BasicCustomView/Main/ViewController.swift | 19 + .../BasicCustomView/Pop Up/PopUp.storyboard | 76 +++ .../BasicCustomView/Pop Up/PopUp.swift | 17 + .../Pop Up/Views/CustomPopUp.swift | 17 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 ++++ .../Resources/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../Supporting Files/Info.plist | 25 + .../View Pager/ViewPager.storyboard | 96 ++++ .../View Pager/ViewPager.swift | 17 + .../View Pager/Views/CustomViewPager.swift | 17 + 51 files changed, 2876 insertions(+) create mode 100644 .DS_Store create mode 100644 BasicCustomView/.DS_Store create mode 100644 BasicCustomView/Final/.DS_Store create mode 100644 BasicCustomView/Final/BasicCustomView/.DS_Store create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView.xcodeproj/project.pbxproj create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Application/AppDelegate.swift create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Application/SceneDelegate.swift create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.storyboard create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.swift create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Bottom Sheet/Views/CustomBottomSheet.swift create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Main/Base.lproj/Main.storyboard create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Main/ViewController.swift create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Pop Up/PopUp.storyboard create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Pop Up/PopUp.swift create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Pop Up/Views/CustomPopUp.swift create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/Contents.json create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Base.lproj/LaunchScreen.storyboard create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/Supporting Files/Info.plist create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/ViewPager.storyboard create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/ViewPager.swift create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/CustomViewPager.swift create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/FirstViewController.swift create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/SecondViewController.swift create mode 100644 BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/ThirdViewController.swift create mode 100644 BasicCustomView/Starter/.DS_Store create mode 100644 BasicCustomView/Starter/BasicCustomView/.DS_Store create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView.xcodeproj/project.pbxproj create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Application/AppDelegate.swift create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Application/SceneDelegate.swift create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.storyboard create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.swift create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Bottom Sheet/Views/CustomBottomSheet.swift create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Main/Base.lproj/Main.storyboard create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Main/ViewController.swift create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Pop Up/PopUp.storyboard create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Pop Up/PopUp.swift create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Pop Up/Views/CustomPopUp.swift create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/Contents.json create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Base.lproj/LaunchScreen.storyboard create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/Supporting Files/Info.plist create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/View Pager/ViewPager.storyboard create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/View Pager/ViewPager.swift create mode 100644 BasicCustomView/Starter/BasicCustomView/BasicCustomView/View Pager/Views/CustomViewPager.swift diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8acbfd2cdabe2279d772df42dbfc891c25ca0366 GIT binary patch literal 6148 zcmeHK%}T>S5T4a)5{pK-h=i}v zf*Pa{LjrWlTMZ}%6a)W_0d{uRzy=pjZ2*(!w+9UzX+!2^ao-E6hn|mKKMdleTz)1C zi-o0SO*6EjcI|X&<|J;C#{OfcU}OjL%J#9Sc1IL5iL6iv|2nR3a(5t> zK-DS+6aya_SQOn7d;d?ruKzy@=XgUW>Y<278LPP`Tio$qYnGVlEIzP}Cm*PJ?O`1AofEJN77toB#j- literal 0 HcmV?d00001 diff --git a/BasicCustomView/.DS_Store b/BasicCustomView/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..22e4dd21723a8159e09864e69254802222a775f8 GIT binary patch literal 6148 zcmeHK&2G~`5T0#QY*QfxsYp3m;u=9pql$tmObAF^F@gi2V8>Bw;p|4XLk>|SpW!vQ z_u2>G894AVFtfW68z+Sut*RYq_FM1F?9VsaT`vHz-Za?6&cm z77AvvkL+b8hH)n1HDB9c8L$joJqBp+?!XI3fkOo5{w2#()O)|A$f+Bi@vNBWoqirq zva~2WogZv#yRmb_aXe?&`4FCpSy)EpwCF|oJNkMpL>4dWQT!$y%?8cAXM&ee%15~j zNRtt|ynmbWM9g|(%9BFIhRWc1t~Y45=JW2sVcYK>br)@ae)OP&^@GF3!gKH3z5n>t z;8Ql{;)|R!Fg%;2+|sy&uUIiwloZ1(#u<{k(VU&^heI)*ETdMfW6|$x8r*LW+s8j| ze<#w6__0X-;W0V=+X$b-oM(ccV6QYY2SO+@RXLU;$c+P+5_X1aCamUtO_Ekym6^Dj zX+!dA9%cet{K+Goz%{QwNxax=Ln3Sa)RKwWx=RX8yH_+WZu zre7#bj*k8N(j8c!(3X|~%fKoF+v>AP_y6;Y-~X#Y_RBJ08Msyqutq=Z_i#!2Ze3d( w-L*dIM^qB>s}#x*EcA6OD|8jNP^F;FrwU@Au~LXFDE3D{(qIeAz<*`nHz>j7GXMYp literal 0 HcmV?d00001 diff --git a/BasicCustomView/Final/.DS_Store b/BasicCustomView/Final/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9b0a35109c8096123d65ec30a0f810585a39fec8 GIT binary patch literal 6148 zcmeHKO>5gg5S?|L+9H(r&_a%aUPJ3PCJ=g2l;qHB6_P_+T*)$xsG<#)Tpf%-=k^cf zm*nrHZ+6!q!7aX-B+S6}1C<$L zL`O8Gk}A?m-qP?G8Q`_srjTN+T1NNR?~=~YGN$@du186(6L|7(atM8UYXsKH=%g;M zT=aEvm1kwu@877_Mtk!`r{i_DI^UuTT}M@1P0KKzeBs)u)_Jn9-EV(F0L7 z6lg=0dtxXXj&|Sq1r8gFHk_1ud?=S$xfhBu*)hIv+(`u%r4$B)frkui*lLf@|C9f} z{~rcPO&Aaco)rVCeHjukK!Gu5w!bk00W1O SMYKTVB4B8cLKs*p1AhUDC~9v2 literal 0 HcmV?d00001 diff --git a/BasicCustomView/Final/BasicCustomView/.DS_Store b/BasicCustomView/Final/BasicCustomView/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..453c3bb157a5fc29a64d63368f5d3b7ab37eadc5 GIT binary patch literal 6148 zcmeHK%}T>S5dOASsCcm66fb-8CiLPt#`pvU&)P)%Az_QP=rJeX#5eIVd<-AJZ+4c_ z((0jz6q$jUZ!?*hFyF#%27t?_)d1)N=urhbJ2Wdq-it0tCwaDsF4ibX#~w@8&zx24k0Ii~(c77}#(IdOV}#%4aI3HQBz$SF`TB;?^9fs zuvOG_xHNpY^ktVO6c@kF`aXukWr}8v0b^j1fh~RP%l&`x{rta}WKYI`G4QV#aNS~9 z + + + + diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/BasicCustomView/Final/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Application/AppDelegate.swift b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Application/AppDelegate.swift new file mode 100644 index 0000000..0c09ab6 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Application/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +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/BasicCustomView/Final/BasicCustomView/BasicCustomView/Application/SceneDelegate.swift b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Application/SceneDelegate.swift new file mode 100644 index 0000000..6b09a6c --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Application/SceneDelegate.swift @@ -0,0 +1,19 @@ +// +// SceneDelegate.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + guard let _ = (scene as? UIWindowScene) else { return } + } +} + diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.storyboard b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.storyboard new file mode 100644 index 0000000..0e0df04 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.storyboard @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.swift b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.swift new file mode 100644 index 0000000..9823602 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.swift @@ -0,0 +1,25 @@ +// +// BottomSheet.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class BottomSheet: UIViewController { + override func viewDidLoad() { + super.viewDidLoad() + + } + + @IBAction func showBottomSheetTapped(_ sender: Any) { + print("커스텀 바텀시트 띄우기") + guard let customBottomSheet = self.storyboard?.instantiateViewController(withIdentifier: "CustomBottomSheet") as? CustomBottomSheet else { return } + customBottomSheet.modalTransitionStyle = .crossDissolve + customBottomSheet.modalPresentationStyle = .overFullScreen + present(customBottomSheet, animated: false) { + customBottomSheet.showBottomSheetWithAnimation() + } + } +} diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Bottom Sheet/Views/CustomBottomSheet.swift b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Bottom Sheet/Views/CustomBottomSheet.swift new file mode 100644 index 0000000..b536650 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Bottom Sheet/Views/CustomBottomSheet.swift @@ -0,0 +1,57 @@ +// +// CustomBottomSheet.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class CustomBottomSheet: UIViewController { + + @IBOutlet weak var containerView: UIView! + @IBOutlet weak var containerHeight: NSLayoutConstraint! + @IBOutlet weak var itemStackView: UIStackView! + + override func viewDidLoad() { + super.viewDidLoad() + setupUI() + } + + override func touchesBegan(_ touches: Set, with event: UIEvent?) { + super.touchesBegan(touches, with: event) + if let touch = touches.first, + touch.view == self.view { + hideBottomSheetWithAnimation() + } + } + + private func setupUI() { + containerHeight.constant = 0 + containerView.layer.cornerRadius = 12 + containerView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] + } + + @IBAction func cancelButtonTapped(_ sender: Any) { + hideBottomSheetWithAnimation() + } +} + +// MARK: - Show/Hide Animation +extension CustomBottomSheet { + func showBottomSheetWithAnimation() { + UIView.animate(withDuration: 0.3) { + self.containerHeight.constant = 330 + self.view.layoutIfNeeded() + } + } + + func hideBottomSheetWithAnimation() { + UIView.animate(withDuration: 0.3) { + self.containerHeight.constant = 0 + self.view.layoutIfNeeded() + } completion: { _ in + self.dismiss(animated: false) + } + } +} diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Main/Base.lproj/Main.storyboard b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Main/Base.lproj/Main.storyboard new file mode 100644 index 0000000..60609f4 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Main/Base.lproj/Main.storyboard @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Main/ViewController.swift b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Main/ViewController.swift new file mode 100644 index 0000000..18ee11f --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Main/ViewController.swift @@ -0,0 +1,16 @@ +// +// ViewController.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } +} diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Pop Up/PopUp.storyboard b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Pop Up/PopUp.storyboard new file mode 100644 index 0000000..d329fc6 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Pop Up/PopUp.storyboard @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Pop Up/PopUp.swift b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Pop Up/PopUp.swift new file mode 100644 index 0000000..8e84baf --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Pop Up/PopUp.swift @@ -0,0 +1,24 @@ +// +// PopUp.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class PopUp: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + } + + @IBAction func showPopUpTapped(_ sender: Any) { + print("커스텀 팝업 띄우기") + guard let customPopUp = self.storyboard?.instantiateViewController(withIdentifier: "CustomPopUp") as? CustomPopUp else { return } + customPopUp.modalTransitionStyle = .crossDissolve + customPopUp.modalPresentationStyle = .overFullScreen + present(customPopUp, animated: true) + } +} diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Pop Up/Views/CustomPopUp.swift b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Pop Up/Views/CustomPopUp.swift new file mode 100644 index 0000000..95077e5 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Pop Up/Views/CustomPopUp.swift @@ -0,0 +1,43 @@ +// +// CustomPopUp.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class CustomPopUp: UIViewController { + + @IBOutlet weak var containerView: UIView! + @IBOutlet weak var iconImageView: UIImageView! + @IBOutlet weak var titleLabel: UILabel! + @IBOutlet weak var descriptionLabel: UILabel! + @IBOutlet weak var startButton: UIButton! + + override func viewDidLoad() { + super.viewDidLoad() + setupUI() + } + + override func touchesBegan(_ touches: Set, with event: UIEvent?) { + super.touchesBegan(touches, with: event) + if let touch = touches.first, + touch.view == self.view { + dismiss(animated: true) + } + } + + private func setupUI() { + containerView.layer.cornerRadius = 12 + containerView.clipsToBounds = true + iconImageView.layer.cornerRadius = iconImageView.frame.width/2 + } + + @IBAction func startButtonTapped(_ sender: Any) { + /* + 이 부분에서 Button에 대한 액션 처리를 해주면 됩니다. + */ + dismiss(animated: true) + } +} diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/Contents.json b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Base.lproj/LaunchScreen.storyboard b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Resources/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/Supporting Files/Info.plist b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Supporting Files/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/Supporting Files/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/ViewPager.storyboard b/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/ViewPager.storyboard new file mode 100644 index 0000000..ff7ff01 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/ViewPager.storyboard @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/ViewPager.swift b/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/ViewPager.swift new file mode 100644 index 0000000..446e448 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/ViewPager.swift @@ -0,0 +1,23 @@ +// +// ViewPager.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class ViewPager: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + navigationController?.navigationBar.isHidden = true + } + + @IBAction func showViewPagerTapped(_ sender: Any) { + print("뷰 페이저 화면으로 전환하기") + guard let customViewPager = self.storyboard?.instantiateViewController(withIdentifier: "CustomViewPager") as? CustomViewPager else { return } + self.navigationController?.pushViewController(customViewPager, animated: true) + } +} diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/CustomViewPager.swift b/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/CustomViewPager.swift new file mode 100644 index 0000000..3fb2cf5 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/CustomViewPager.swift @@ -0,0 +1,140 @@ +// +// CustomViewPager.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class CustomViewPager: UIViewController { + + @IBOutlet weak var buttonStackView: UIStackView! + @IBOutlet weak var barBackgroundView: UIView! + @IBOutlet weak var barView: UIView! + @IBOutlet weak var barLeading: NSLayoutConstraint! + @IBOutlet weak var barWidth: NSLayoutConstraint! + @IBOutlet weak var containerView: UIView! + + // 페이지 뷰 컨트롤러 + private let pageViewController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal) + // 컨텐츠로 들어갈 뷰 컨트롤러 배열 + private let contents: [UIViewController] = [ + FirstViewController(), + SecondViewController(), + ThirdViewController() + ] + + // 현재 몇 번째 페이지를 보고 있는지 체크 위한 인덱스 변수 + private var currentIndex: Int = 0 + // 탭이 클릭된 건지 판단하기 위한 변수(스와이프랑 구분하기 위함) + private var tappedButton: Bool = false + + + override func viewDidLoad() { + super.viewDidLoad() + setupUI() + setupPageViewController() + } + + private func setupUI() { + barWidth.constant = view.bounds.width / CGFloat(buttonStackView.arrangedSubviews.count) + pageViewController.view.backgroundColor = .black + } + + private func setupPageViewController() { + self.addChild(pageViewController) + pageViewController.view.frame = containerView.frame + self.containerView.addSubview(pageViewController.view) + pageViewController.didMove(toParent: self) + + pageViewController.delegate = self + pageViewController.dataSource = self + + if let firstVC = contents.first { + pageViewController.setViewControllers([firstVC], direction: .forward, animated: true) + } + + for subview in pageViewController.view.subviews { + if let scrollView = subview as? UIScrollView { + scrollView.delegate = self + } + } + } + + @IBAction func tabButtonTapped(_ sender: UIButton) { + + guard let index = buttonStackView.arrangedSubviews.firstIndex(where: { $0 == sender }), + index != currentIndex else { + // index를 정확히 가져오지 못하거나 + // 현재 선택되어 있는 페이지의 탭과 같다면(이동할 필요가 없음) + return + } + + // 버튼이 선택되었다는 것을 나타냄(true) + tappedButton = true + + UIView.animate(withDuration: 0.3) { + // 인디케이터(바)를 좌우로 이동시키기 위해 constraint 값 조정 + self.barLeading.constant = CGFloat(index) * self.barView.frame.width + self.barBackgroundView.layoutIfNeeded() + } + + // 현재 인덱스에 맞는 뷰 컨트롤러 + let content = contents[index] + + pageViewController.setViewControllers( + [content], + direction: currentIndex < index ? .forward : .reverse, // 현재 보고 있는 페이지가 인덱스(선택한 탭)보다 작아? 그럼 다음 페이지로 가, 아니면 이전 페이지로 가! + animated: true) { _ in + self.currentIndex = index + self.tappedButton = false + } + } +} + +extension CustomViewPager: UIPageViewControllerDelegate, UIPageViewControllerDataSource { + + // Paging 애니메이션이 끝났을 때 처리 + func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { + guard let viewController = pageViewController.viewControllers?.first, + let index = contents.firstIndex(where: { $0 == viewController }) else { + return + } + currentIndex = index + } + + func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { + guard let index = contents.firstIndex(of: viewController) else { return nil } + let previousIndex = index - 1 + if previousIndex < 0 { + return nil + } + return contents[previousIndex] + } + + func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { + guard let index = contents.firstIndex(of: viewController) else { return nil } + let nextIndex = index + 1 + if nextIndex == contents.count { + return nil + } + return contents[nextIndex] + } +} + +extension CustomViewPager: UIScrollViewDelegate { + func scrollViewDidScroll(_ scrollView: UIScrollView) { + // 스와이프랑 탭 클릭이랑 구분하기 위한 코드 + guard !tappedButton else { return } + + let offsetX = scrollView.contentOffset.x + let contentWidth = pageViewController.view.frame.width + + // 0 ~ 1 (좌우로 얼마나 움직였는지 체크하기 위한 퍼센티지) + let percent = (offsetX - contentWidth) / contentWidth + + let constant = (CGFloat(currentIndex) + percent) * barView.frame.width + barView.frame.origin.x = constant + } +} diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/FirstViewController.swift b/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/FirstViewController.swift new file mode 100644 index 0000000..ad437a7 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/FirstViewController.swift @@ -0,0 +1,17 @@ +// +// FirstViewController.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class FirstViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .red + } +} diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/SecondViewController.swift b/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/SecondViewController.swift new file mode 100644 index 0000000..67576d2 --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/SecondViewController.swift @@ -0,0 +1,17 @@ +// +// SecondViewController.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class SecondViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .green + } +} diff --git a/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/ThirdViewController.swift b/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/ThirdViewController.swift new file mode 100644 index 0000000..03e5fac --- /dev/null +++ b/BasicCustomView/Final/BasicCustomView/BasicCustomView/View Pager/Views/ThirdViewController.swift @@ -0,0 +1,17 @@ +// +// ThirdViewController.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class ThirdViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .blue + } +} diff --git a/BasicCustomView/Starter/.DS_Store b/BasicCustomView/Starter/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..fdbedf13784db718246a1313281706298e0eebe4 GIT binary patch literal 6148 zcmeHKyG{c!5S)b+ktj$>>0jUvPDl6xBx)d`Knl7dM6_4&UHP=kKAO`(712bq(t7Om zjxA4ddket&!}cCn0a(%<@#DkXeBXU$R~0cLoo8(DfCKjU!Z6GJJ>cA1^mrxfW5WN$ zGb8W#-tITMw_(_Ms!R$<0VyB_q<|DSQ-La|%bPRL5nT#Mfy-0CzYmS>*cFb6@#)|Y zEdX)Ba2V&&OAwm}h+W~B$Oz4nN=&L%i(yG;yj5OTI3^|?R?Uai%~lep>f@Qq|Vktw_aGjuQpUCzpzcoUD|E%X4s>S{tl zqKhCBqzbBDPfb+~^%}aT0Jy=l>H|Fh8C9^eL$gBUz37s3l4qOfVvP~bFvSFq2usoC z*hB_o@Afdj6?g3p^ZVD}f}U$URg+O&hEQ{harkp6j`7SQ0TmO+c;M>3zUdD~p&7^S z-O0y#Rhm!~WgSXpXRk*upYQu`r|VX#eyP&lVXe zz?Rb8y40N9wVrxO6_L1BahAeGyownsSMdQg3jJOd#5`fENDsw+1R@P)jDbI8;0vTy BRJQ;C literal 0 HcmV?d00001 diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView.xcodeproj/project.pbxproj b/BasicCustomView/Starter/BasicCustomView/BasicCustomView.xcodeproj/project.pbxproj new file mode 100644 index 0000000..35b7904 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView.xcodeproj/project.pbxproj @@ -0,0 +1,483 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + BD895C2B2823B2BF000AB87A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD895C2A2823B2BF000AB87A /* AppDelegate.swift */; }; + BD895C2D2823B2BF000AB87A /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD895C2C2823B2BF000AB87A /* SceneDelegate.swift */; }; + BD895C2F2823B2BF000AB87A /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD895C2E2823B2BF000AB87A /* ViewController.swift */; }; + BD895C322823B2BF000AB87A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BD895C302823B2BF000AB87A /* Main.storyboard */; }; + BD895C342823B2C0000AB87A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BD895C332823B2C0000AB87A /* Assets.xcassets */; }; + BD895C372823B2C0000AB87A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BD895C352823B2C0000AB87A /* LaunchScreen.storyboard */; }; + BD895C472823B599000AB87A /* PopUp.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BD895C462823B599000AB87A /* PopUp.storyboard */; }; + BD895C492823B5A3000AB87A /* PopUp.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD895C482823B5A3000AB87A /* PopUp.swift */; }; + BD895C4B2823B5B0000AB87A /* BottomSheet.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BD895C4A2823B5B0000AB87A /* BottomSheet.storyboard */; }; + BD895C4D2823B5B9000AB87A /* BottomSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD895C4C2823B5B9000AB87A /* BottomSheet.swift */; }; + BD895C4F2823B5C0000AB87A /* ViewPager.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BD895C4E2823B5C0000AB87A /* ViewPager.storyboard */; }; + BD895C512823B5C8000AB87A /* ViewPager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD895C502823B5C8000AB87A /* ViewPager.swift */; }; + BD895C562823B9C6000AB87A /* CustomPopUp.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD895C552823B9C6000AB87A /* CustomPopUp.swift */; }; + BD895C582823B9D2000AB87A /* CustomBottomSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD895C572823B9D2000AB87A /* CustomBottomSheet.swift */; }; + BD895C5A2823B9E8000AB87A /* CustomViewPager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD895C592823B9E8000AB87A /* CustomViewPager.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + BD895C272823B2BF000AB87A /* BasicCustomView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BasicCustomView.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BD895C2A2823B2BF000AB87A /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + BD895C2C2823B2BF000AB87A /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + BD895C2E2823B2BF000AB87A /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + BD895C312823B2BF000AB87A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + BD895C332823B2C0000AB87A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + BD895C362823B2C0000AB87A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + BD895C382823B2C0000AB87A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + BD895C462823B599000AB87A /* PopUp.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = PopUp.storyboard; sourceTree = ""; }; + BD895C482823B5A3000AB87A /* PopUp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopUp.swift; sourceTree = ""; }; + BD895C4A2823B5B0000AB87A /* BottomSheet.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = BottomSheet.storyboard; sourceTree = ""; }; + BD895C4C2823B5B9000AB87A /* BottomSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomSheet.swift; sourceTree = ""; }; + BD895C4E2823B5C0000AB87A /* ViewPager.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = ViewPager.storyboard; sourceTree = ""; }; + BD895C502823B5C8000AB87A /* ViewPager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewPager.swift; sourceTree = ""; }; + BD895C552823B9C6000AB87A /* CustomPopUp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomPopUp.swift; sourceTree = ""; }; + BD895C572823B9D2000AB87A /* CustomBottomSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomBottomSheet.swift; sourceTree = ""; }; + BD895C592823B9E8000AB87A /* CustomViewPager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomViewPager.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + BD895C242823B2BF000AB87A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + BD895C1E2823B2BF000AB87A = { + isa = PBXGroup; + children = ( + BD895C292823B2BF000AB87A /* BasicCustomView */, + BD895C282823B2BF000AB87A /* Products */, + ); + sourceTree = ""; + }; + BD895C282823B2BF000AB87A /* Products */ = { + isa = PBXGroup; + children = ( + BD895C272823B2BF000AB87A /* BasicCustomView.app */, + ); + name = Products; + sourceTree = ""; + }; + BD895C292823B2BF000AB87A /* BasicCustomView */ = { + isa = PBXGroup; + children = ( + BD895C432823B54C000AB87A /* Main */, + BD895C422823B509000AB87A /* Pop Up */, + BD895C442823B559000AB87A /* Bottom Sheet */, + BD895C452823B560000AB87A /* View Pager */, + BD895C412823B4EB000AB87A /* Resources */, + BD895C402823B3AE000AB87A /* Supporting Files */, + BD895C3F2823B3A5000AB87A /* Application */, + ); + path = BasicCustomView; + sourceTree = ""; + }; + BD895C3F2823B3A5000AB87A /* Application */ = { + isa = PBXGroup; + children = ( + BD895C2A2823B2BF000AB87A /* AppDelegate.swift */, + BD895C2C2823B2BF000AB87A /* SceneDelegate.swift */, + ); + path = Application; + sourceTree = ""; + }; + BD895C402823B3AE000AB87A /* Supporting Files */ = { + isa = PBXGroup; + children = ( + BD895C382823B2C0000AB87A /* Info.plist */, + ); + path = "Supporting Files"; + sourceTree = ""; + }; + BD895C412823B4EB000AB87A /* Resources */ = { + isa = PBXGroup; + children = ( + BD895C332823B2C0000AB87A /* Assets.xcassets */, + BD895C352823B2C0000AB87A /* LaunchScreen.storyboard */, + ); + path = Resources; + sourceTree = ""; + }; + BD895C422823B509000AB87A /* Pop Up */ = { + isa = PBXGroup; + children = ( + BD895C522823B99B000AB87A /* Views */, + BD895C462823B599000AB87A /* PopUp.storyboard */, + BD895C482823B5A3000AB87A /* PopUp.swift */, + ); + path = "Pop Up"; + sourceTree = ""; + }; + BD895C432823B54C000AB87A /* Main */ = { + isa = PBXGroup; + children = ( + BD895C2E2823B2BF000AB87A /* ViewController.swift */, + BD895C302823B2BF000AB87A /* Main.storyboard */, + ); + path = Main; + sourceTree = ""; + }; + BD895C442823B559000AB87A /* Bottom Sheet */ = { + isa = PBXGroup; + children = ( + BD895C532823B99F000AB87A /* Views */, + BD895C4A2823B5B0000AB87A /* BottomSheet.storyboard */, + BD895C4C2823B5B9000AB87A /* BottomSheet.swift */, + ); + path = "Bottom Sheet"; + sourceTree = ""; + }; + BD895C452823B560000AB87A /* View Pager */ = { + isa = PBXGroup; + children = ( + BD895C542823B9A2000AB87A /* Views */, + BD895C4E2823B5C0000AB87A /* ViewPager.storyboard */, + BD895C502823B5C8000AB87A /* ViewPager.swift */, + ); + path = "View Pager"; + sourceTree = ""; + }; + BD895C522823B99B000AB87A /* Views */ = { + isa = PBXGroup; + children = ( + BD895C552823B9C6000AB87A /* CustomPopUp.swift */, + ); + path = Views; + sourceTree = ""; + }; + BD895C532823B99F000AB87A /* Views */ = { + isa = PBXGroup; + children = ( + BD895C572823B9D2000AB87A /* CustomBottomSheet.swift */, + ); + path = Views; + sourceTree = ""; + }; + BD895C542823B9A2000AB87A /* Views */ = { + isa = PBXGroup; + children = ( + BD895C592823B9E8000AB87A /* CustomViewPager.swift */, + ); + path = Views; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + BD895C262823B2BF000AB87A /* BasicCustomView */ = { + isa = PBXNativeTarget; + buildConfigurationList = BD895C3B2823B2C0000AB87A /* Build configuration list for PBXNativeTarget "BasicCustomView" */; + buildPhases = ( + BD895C232823B2BF000AB87A /* Sources */, + BD895C242823B2BF000AB87A /* Frameworks */, + BD895C252823B2BF000AB87A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BasicCustomView; + productName = BasicCustomView; + productReference = BD895C272823B2BF000AB87A /* BasicCustomView.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BD895C1F2823B2BF000AB87A /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1320; + LastUpgradeCheck = 1320; + TargetAttributes = { + BD895C262823B2BF000AB87A = { + CreatedOnToolsVersion = 13.2.1; + }; + }; + }; + buildConfigurationList = BD895C222823B2BF000AB87A /* Build configuration list for PBXProject "BasicCustomView" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = BD895C1E2823B2BF000AB87A; + productRefGroup = BD895C282823B2BF000AB87A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + BD895C262823B2BF000AB87A /* BasicCustomView */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + BD895C252823B2BF000AB87A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BD895C372823B2C0000AB87A /* LaunchScreen.storyboard in Resources */, + BD895C342823B2C0000AB87A /* Assets.xcassets in Resources */, + BD895C4B2823B5B0000AB87A /* BottomSheet.storyboard in Resources */, + BD895C322823B2BF000AB87A /* Main.storyboard in Resources */, + BD895C472823B599000AB87A /* PopUp.storyboard in Resources */, + BD895C4F2823B5C0000AB87A /* ViewPager.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + BD895C232823B2BF000AB87A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BD895C562823B9C6000AB87A /* CustomPopUp.swift in Sources */, + BD895C2F2823B2BF000AB87A /* ViewController.swift in Sources */, + BD895C4D2823B5B9000AB87A /* BottomSheet.swift in Sources */, + BD895C582823B9D2000AB87A /* CustomBottomSheet.swift in Sources */, + BD895C512823B5C8000AB87A /* ViewPager.swift in Sources */, + BD895C2B2823B2BF000AB87A /* AppDelegate.swift in Sources */, + BD895C5A2823B9E8000AB87A /* CustomViewPager.swift in Sources */, + BD895C492823B5A3000AB87A /* PopUp.swift in Sources */, + BD895C2D2823B2BF000AB87A /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + BD895C302823B2BF000AB87A /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + BD895C312823B2BF000AB87A /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + BD895C352823B2C0000AB87A /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + BD895C362823B2C0000AB87A /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + BD895C392823B2C0000AB87A /* 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++17"; + CLANG_CXX_LIBRARY = "libc++"; + 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 = 15.2; + 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; + }; + BD895C3A2823B2C0000AB87A /* 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++17"; + CLANG_CXX_LIBRARY = "libc++"; + 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 = 15.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + BD895C3C2823B2C0000AB87A /* 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 = W7P3R7ZL78; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "BasicCustomView/Supporting Files/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"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.sopt.BasicCustomView; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + BD895C3D2823B2C0000AB87A /* 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 = W7P3R7ZL78; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "BasicCustomView/Supporting Files/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"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.sopt.BasicCustomView; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + BD895C222823B2BF000AB87A /* Build configuration list for PBXProject "BasicCustomView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BD895C392823B2C0000AB87A /* Debug */, + BD895C3A2823B2C0000AB87A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BD895C3B2823B2C0000AB87A /* Build configuration list for PBXNativeTarget "BasicCustomView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BD895C3C2823B2C0000AB87A /* Debug */, + BD895C3D2823B2C0000AB87A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BD895C1F2823B2BF000AB87A /* Project object */; +} diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/BasicCustomView/Starter/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/BasicCustomView/Starter/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Application/AppDelegate.swift b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Application/AppDelegate.swift new file mode 100644 index 0000000..0c09ab6 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Application/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +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/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Application/SceneDelegate.swift b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Application/SceneDelegate.swift new file mode 100644 index 0000000..6b09a6c --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Application/SceneDelegate.swift @@ -0,0 +1,19 @@ +// +// SceneDelegate.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + guard let _ = (scene as? UIWindowScene) else { return } + } +} + diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.storyboard b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.storyboard new file mode 100644 index 0000000..26acb12 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.storyboard @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.swift b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.swift new file mode 100644 index 0000000..52b9a21 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Bottom Sheet/BottomSheet.swift @@ -0,0 +1,17 @@ +// +// BottomSheet.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class BottomSheet: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } +} diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Bottom Sheet/Views/CustomBottomSheet.swift b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Bottom Sheet/Views/CustomBottomSheet.swift new file mode 100644 index 0000000..e264b77 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Bottom Sheet/Views/CustomBottomSheet.swift @@ -0,0 +1,17 @@ +// +// CustomBottomSheet.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class CustomBottomSheet: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } +} diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Main/Base.lproj/Main.storyboard b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Main/Base.lproj/Main.storyboard new file mode 100644 index 0000000..60609f4 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Main/Base.lproj/Main.storyboard @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Main/ViewController.swift b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Main/ViewController.swift new file mode 100644 index 0000000..7dd0f89 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Main/ViewController.swift @@ -0,0 +1,19 @@ +// +// ViewController.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + +} + diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Pop Up/PopUp.storyboard b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Pop Up/PopUp.storyboard new file mode 100644 index 0000000..8cfdd34 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Pop Up/PopUp.storyboard @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Pop Up/PopUp.swift b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Pop Up/PopUp.swift new file mode 100644 index 0000000..c6ad794 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Pop Up/PopUp.swift @@ -0,0 +1,17 @@ +// +// PopUp.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class PopUp: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } +} diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Pop Up/Views/CustomPopUp.swift b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Pop Up/Views/CustomPopUp.swift new file mode 100644 index 0000000..5ef5400 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Pop Up/Views/CustomPopUp.swift @@ -0,0 +1,17 @@ +// +// CustomPopUp.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class CustomPopUp: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } +} diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/Contents.json b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Base.lproj/LaunchScreen.storyboard b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Resources/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Supporting Files/Info.plist b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Supporting Files/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/Supporting Files/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/View Pager/ViewPager.storyboard b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/View Pager/ViewPager.storyboard new file mode 100644 index 0000000..6938053 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/View Pager/ViewPager.storyboard @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/View Pager/ViewPager.swift b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/View Pager/ViewPager.swift new file mode 100644 index 0000000..de9a894 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/View Pager/ViewPager.swift @@ -0,0 +1,17 @@ +// +// ViewPager.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class ViewPager: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + navigationController?.navigationBar.isHidden = true + } +} diff --git a/BasicCustomView/Starter/BasicCustomView/BasicCustomView/View Pager/Views/CustomViewPager.swift b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/View Pager/Views/CustomViewPager.swift new file mode 100644 index 0000000..771c072 --- /dev/null +++ b/BasicCustomView/Starter/BasicCustomView/BasicCustomView/View Pager/Views/CustomViewPager.swift @@ -0,0 +1,17 @@ +// +// CustomViewPager.swift +// BasicCustomView +// +// Created by taehy.k on 2022/05/05. +// + +import UIKit + +class CustomViewPager: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } +}