diff --git a/GO_SOPT_Seminar_Assignment.xcodeproj/project.pbxproj b/GO_SOPT_Seminar_Assignment.xcodeproj/project.pbxproj index b865130..59bc984 100644 --- a/GO_SOPT_Seminar_Assignment.xcodeproj/project.pbxproj +++ b/GO_SOPT_Seminar_Assignment.xcodeproj/project.pbxproj @@ -7,6 +7,12 @@ objects = { /* Begin PBXBuildFile section */ + 6B09E72529F6ECE500EFECAB /* MyPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B09E72429F6ECE500EFECAB /* MyPageView.swift */; }; + 6B09E72729F6ECFB00EFECAB /* MyPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B09E72629F6ECFB00EFECAB /* MyPageViewController.swift */; }; + 6B09E72929F6ED7900EFECAB /* UIImage+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B09E72829F6ED7900EFECAB /* UIImage+.swift */; }; + 6B09E72F29F6F33200EFECAB /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B09E72E29F6F33200EFECAB /* MainView.swift */; }; + 6B09E73129F6F34200EFECAB /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B09E73029F6F34200EFECAB /* MainViewController.swift */; }; + 6B09E73329F6FB4E00EFECAB /* doosan.png in Resources */ = {isa = PBXBuildFile; fileRef = 6B09E73229F6FB4E00EFECAB /* doosan.png */; }; 6B5944FD29F5BE000087A4C3 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5944FC29F5BE000087A4C3 /* AppDelegate.swift */; }; 6B5944FF29F5BE000087A4C3 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5944FE29F5BE000087A4C3 /* SceneDelegate.swift */; }; 6B59450629F5BE010087A4C3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6B59450529F5BE010087A4C3 /* Assets.xcassets */; }; @@ -34,13 +40,55 @@ 6B59454429F5C5380087A4C3 /* UIStackView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B59454329F5C5380087A4C3 /* UIStackView+.swift */; }; 6B59454629F5C5490087A4C3 /* UITextField+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B59454529F5C5490087A4C3 /* UITextField+.swift */; }; 6B59454829F5C5590087A4C3 /* UIView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B59454729F5C5590087A4C3 /* UIView+.swift */; }; - 6B59454A29F5C6030087A4C3 /* WelcomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B59454929F5C6030087A4C3 /* WelcomeViewController.swift */; }; - 6B59454D29F5C6300087A4C3 /* AddNickNameBottomSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B59454C29F5C6300087A4C3 /* AddNickNameBottomSheetView.swift */; }; + 6B59454D29F5C6300087A4C3 /* NickNameBottomSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B59454C29F5C6300087A4C3 /* NickNameBottomSheetView.swift */; }; 6B59454F29F5C6560087A4C3 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B59454E29F5C6560087A4C3 /* LoginView.swift */; }; - 6B59455129F5C66D0087A4C3 /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B59455029F5C66D0087A4C3 /* WelcomeView.swift */; }; + 6B6C2F5929FECF2000F76247 /* MainViewSectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F5829FECF2000F76247 /* MainViewSectionHeader.swift */; }; + 6B6C2F5F29FF9BC100F76247 /* ContentsSectionLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F5E29FF9BC100F76247 /* ContentsSectionLayout.swift */; }; + 6B6C2F632A00180300F76247 /* MainViewTopMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F622A00180300F76247 /* MainViewTopMenu.swift */; }; + 6B6C2F652A0019CE00F76247 /* pairing.png in Resources */ = {isa = PBXBuildFile; fileRef = 6B6C2F642A0019CE00F76247 /* pairing.png */; }; + 6B6C2F682A0120E300F76247 /* MainViewPagingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F672A0120E300F76247 /* MainViewPagingIndicator.swift */; }; + 6B6C2F6A2A024E3400F76247 /* MainHomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F692A024E3400F76247 /* MainHomeViewController.swift */; }; + 6B6C2F722A026C2C00F76247 /* MainLiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F712A026C2C00F76247 /* MainLiveViewController.swift */; }; + 6B6C2F742A026C3E00F76247 /* MainTVViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F732A026C3E00F76247 /* MainTVViewController.swift */; }; + 6B6C2F762A026C4F00F76247 /* MainMovieViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F752A026C4F00F76247 /* MainMovieViewController.swift */; }; + 6B6C2F782A026C6300F76247 /* MainParamountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F772A026C6300F76247 /* MainParamountViewController.swift */; }; + 6B6C2F7A2A026C7200F76247 /* MainKidsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F792A026C7200F76247 /* MainKidsViewController.swift */; }; + 6B6C2F842A02946000F76247 /* BottomMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F832A02946000F76247 /* BottomMenu.swift */; }; + 6B6C2F862A029CA700F76247 /* MainViewSegmentIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F852A029CA700F76247 /* MainViewSegmentIndicator.swift */; }; + 6B6C2F8C2A02D92200F76247 /* MainBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6C2F8B2A02D92200F76247 /* MainBaseViewController.swift */; }; + 6B6C2F8F2A06227400F76247 /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 6B6C2F8E2A06227400F76247 /* Alamofire */; }; + 6BF94AFD29F8450F0024C256 /* recordWhite.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94AF529F8450E0024C256 /* recordWhite.jpg */; }; + 6BF94AFE29F8450F0024C256 /* recordGray.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94AF629F8450E0024C256 /* recordGray.jpg */; }; + 6BF94AFF29F8450F0024C256 /* homeWhite.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94AF729F8450E0024C256 /* homeWhite.jpg */; }; + 6BF94B0029F8450F0024C256 /* searchWhite.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94AF829F8450E0024C256 /* searchWhite.jpg */; }; + 6BF94B0129F8450F0024C256 /* preGray.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94AF929F8450E0024C256 /* preGray.jpg */; }; + 6BF94B0229F8450F0024C256 /* homeGray.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94AFA29F8450F0024C256 /* homeGray.jpg */; }; + 6BF94B0329F8450F0024C256 /* searchGray.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94AFB29F8450F0024C256 /* searchGray.jpg */; }; + 6BF94B0429F8450F0024C256 /* preWhite.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94AFC29F8450F0024C256 /* preWhite.jpg */; }; + 6BF94B0829F84C350024C256 /* LabelNextBtnTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF94B0729F84C350024C256 /* LabelNextBtnTableViewCell.swift */; }; + 6BF94B0C29F85D770024C256 /* nextBtn.png in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94B0B29F85D770024C256 /* nextBtn.png */; }; + 6BF94B1029F91C0B0024C256 /* tvingImg.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94B0F29F91C0A0024C256 /* tvingImg.jpg */; }; + 6BF94B1229F91CD90024C256 /* CustomTvingButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF94B1129F91CD90024C256 /* CustomTvingButton.swift */; }; + 6BF94B1429F92B3B0024C256 /* MyPageMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF94B1329F92B3B0024C256 /* MyPageMenu.swift */; }; + 6BF94B1629F986170024C256 /* MyPageViewHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF94B1529F986170024C256 /* MyPageViewHeader.swift */; }; + 6BF94B1829F995B70024C256 /* CALayer+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF94B1729F995B70024C256 /* CALayer+.swift */; }; + 6BF94B1B29F9AA6E0024C256 /* tvingSubscribe.png in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94B1929F9AA6E0024C256 /* tvingSubscribe.png */; }; + 6BF94B1C29F9AA6E0024C256 /* tvingCash.png in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94B1A29F9AA6E0024C256 /* tvingCash.png */; }; + 6BF94B1E29FA5A120024C256 /* tvnJtbc.png in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94B1D29FA5A120024C256 /* tvnJtbc.png */; }; + 6BF94B3F29FA8D950024C256 /* settings.png in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94B3D29FA8D950024C256 /* settings.png */; }; + 6BF94B4029FA8D950024C256 /* notification.png in Resources */ = {isa = PBXBuildFile; fileRef = 6BF94B3E29FA8D950024C256 /* notification.png */; }; + 6BF94B4329FAE94F0024C256 /* TvingUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF94B4229FAE94F0024C256 /* TvingUser.swift */; }; + 6BF94B4C29FD42CD0024C256 /* Contents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF94B4B29FD42CD0024C256 /* Contents.swift */; }; + 6BF94B4E29FD461C0024C256 /* MainViewContentsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF94B4D29FD461C0024C256 /* MainViewContentsCell.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 6B09E72429F6ECE500EFECAB /* MyPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageView.swift; sourceTree = ""; }; + 6B09E72629F6ECFB00EFECAB /* MyPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageViewController.swift; sourceTree = ""; }; + 6B09E72829F6ED7900EFECAB /* UIImage+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+.swift"; sourceTree = ""; }; + 6B09E72E29F6F33200EFECAB /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = ""; }; + 6B09E73029F6F34200EFECAB /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; + 6B09E73229F6FB4E00EFECAB /* doosan.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = doosan.png; sourceTree = ""; }; 6B5944F929F5BE000087A4C3 /* GO_SOPT_Seminar_Assignment.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GO_SOPT_Seminar_Assignment.app; sourceTree = BUILT_PRODUCTS_DIR; }; 6B5944FC29F5BE000087A4C3 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 6B5944FE29F5BE000087A4C3 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -68,10 +116,45 @@ 6B59454329F5C5380087A4C3 /* UIStackView+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIStackView+.swift"; sourceTree = ""; }; 6B59454529F5C5490087A4C3 /* UITextField+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITextField+.swift"; sourceTree = ""; }; 6B59454729F5C5590087A4C3 /* UIView+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+.swift"; sourceTree = ""; }; - 6B59454929F5C6030087A4C3 /* WelcomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeViewController.swift; sourceTree = ""; }; - 6B59454C29F5C6300087A4C3 /* AddNickNameBottomSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddNickNameBottomSheetView.swift; sourceTree = ""; }; + 6B59454C29F5C6300087A4C3 /* NickNameBottomSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NickNameBottomSheetView.swift; sourceTree = ""; }; 6B59454E29F5C6560087A4C3 /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; }; - 6B59455029F5C66D0087A4C3 /* WelcomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeView.swift; sourceTree = ""; }; + 6B6C2F5829FECF2000F76247 /* MainViewSectionHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewSectionHeader.swift; sourceTree = ""; }; + 6B6C2F5E29FF9BC100F76247 /* ContentsSectionLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentsSectionLayout.swift; sourceTree = ""; }; + 6B6C2F622A00180300F76247 /* MainViewTopMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewTopMenu.swift; sourceTree = ""; }; + 6B6C2F642A0019CE00F76247 /* pairing.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pairing.png; sourceTree = ""; }; + 6B6C2F672A0120E300F76247 /* MainViewPagingIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewPagingIndicator.swift; sourceTree = ""; }; + 6B6C2F692A024E3400F76247 /* MainHomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainHomeViewController.swift; sourceTree = ""; }; + 6B6C2F712A026C2C00F76247 /* MainLiveViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainLiveViewController.swift; sourceTree = ""; }; + 6B6C2F732A026C3E00F76247 /* MainTVViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTVViewController.swift; sourceTree = ""; }; + 6B6C2F752A026C4F00F76247 /* MainMovieViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMovieViewController.swift; sourceTree = ""; }; + 6B6C2F772A026C6300F76247 /* MainParamountViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainParamountViewController.swift; sourceTree = ""; }; + 6B6C2F792A026C7200F76247 /* MainKidsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainKidsViewController.swift; sourceTree = ""; }; + 6B6C2F832A02946000F76247 /* BottomMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomMenu.swift; sourceTree = ""; }; + 6B6C2F852A029CA700F76247 /* MainViewSegmentIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewSegmentIndicator.swift; sourceTree = ""; }; + 6B6C2F8B2A02D92200F76247 /* MainBaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainBaseViewController.swift; sourceTree = ""; }; + 6BF94AF529F8450E0024C256 /* recordWhite.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = recordWhite.jpg; sourceTree = ""; }; + 6BF94AF629F8450E0024C256 /* recordGray.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = recordGray.jpg; sourceTree = ""; }; + 6BF94AF729F8450E0024C256 /* homeWhite.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = homeWhite.jpg; sourceTree = ""; }; + 6BF94AF829F8450E0024C256 /* searchWhite.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = searchWhite.jpg; sourceTree = ""; }; + 6BF94AF929F8450E0024C256 /* preGray.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = preGray.jpg; sourceTree = ""; }; + 6BF94AFA29F8450F0024C256 /* homeGray.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = homeGray.jpg; sourceTree = ""; }; + 6BF94AFB29F8450F0024C256 /* searchGray.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = searchGray.jpg; sourceTree = ""; }; + 6BF94AFC29F8450F0024C256 /* preWhite.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = preWhite.jpg; sourceTree = ""; }; + 6BF94B0729F84C350024C256 /* LabelNextBtnTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelNextBtnTableViewCell.swift; sourceTree = ""; }; + 6BF94B0B29F85D770024C256 /* nextBtn.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = nextBtn.png; sourceTree = ""; }; + 6BF94B0F29F91C0A0024C256 /* tvingImg.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = tvingImg.jpg; sourceTree = ""; }; + 6BF94B1129F91CD90024C256 /* CustomTvingButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTvingButton.swift; sourceTree = ""; }; + 6BF94B1329F92B3B0024C256 /* MyPageMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageMenu.swift; sourceTree = ""; }; + 6BF94B1529F986170024C256 /* MyPageViewHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageViewHeader.swift; sourceTree = ""; }; + 6BF94B1729F995B70024C256 /* CALayer+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CALayer+.swift"; sourceTree = ""; }; + 6BF94B1929F9AA6E0024C256 /* tvingSubscribe.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tvingSubscribe.png; sourceTree = ""; }; + 6BF94B1A29F9AA6E0024C256 /* tvingCash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tvingCash.png; sourceTree = ""; }; + 6BF94B1D29FA5A120024C256 /* tvnJtbc.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tvnJtbc.png; sourceTree = ""; }; + 6BF94B3D29FA8D950024C256 /* settings.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = settings.png; sourceTree = ""; }; + 6BF94B3E29FA8D950024C256 /* notification.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = notification.png; sourceTree = ""; }; + 6BF94B4229FAE94F0024C256 /* TvingUser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TvingUser.swift; sourceTree = ""; }; + 6BF94B4B29FD42CD0024C256 /* Contents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Contents.swift; sourceTree = ""; }; + 6BF94B4D29FD461C0024C256 /* MainViewContentsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewContentsCell.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -79,6 +162,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 6B6C2F8F2A06227400F76247 /* Alamofire in Frameworks */, 6B59453529F5C48E0087A4C3 /* SnapKit in Frameworks */, 6B59453829F5C4AA0087A4C3 /* Then in Frameworks */, ); @@ -87,6 +171,13 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 6B27D6C62A0D63900033BB21 /* Network */ = { + isa = PBXGroup; + children = ( + ); + path = Network; + sourceTree = ""; + }; 6B5944F029F5BE000087A4C3 = { isa = PBXGroup; children = ( @@ -137,6 +228,8 @@ 6B59454329F5C5380087A4C3 /* UIStackView+.swift */, 6B59454529F5C5490087A4C3 /* UITextField+.swift */, 6B59454729F5C5590087A4C3 /* UIView+.swift */, + 6B09E72829F6ED7900EFECAB /* UIImage+.swift */, + 6BF94B1729F995B70024C256 /* CALayer+.swift */, ); path = Extensions; sourceTree = ""; @@ -144,6 +237,7 @@ 6B59451229F5BEDC0087A4C3 /* Classes & Struct & Enum */ = { isa = PBXGroup; children = ( + 6BF94B0729F84C350024C256 /* LabelNextBtnTableViewCell.swift */, 6B59452F29F5C3F80087A4C3 /* CustomPasswordTextField.swift */, 6B59453129F5C4090087A4C3 /* CustomTextField.swift */, ); @@ -161,9 +255,10 @@ 6B59451429F5BF1C0087A4C3 /* TVING */ = { isa = PBXGroup; children = ( + 6B27D6C62A0D63900033BB21 /* Network */, + 6BF94B4429FAE9B70024C256 /* ViewController */, + 6BF94B4129FAE91E0024C256 /* Classes & Structure */, 6B59454B29F5C6180087A4C3 /* View */, - 6B59451729F5C00B0087A4C3 /* LoginViewController.swift */, - 6B59454929F5C6030087A4C3 /* WelcomeViewController.swift */, ); path = TVING; sourceTree = ""; @@ -201,11 +296,21 @@ 6B59452029F5C2030087A4C3 /* Image */ = { isa = PBXGroup; children = ( + 6BF94B1D29FA5A120024C256 /* tvnJtbc.png */, + 6BF94B0529F845C50024C256 /* bottomBtnImg */, + 6BF94B0F29F91C0A0024C256 /* tvingImg.jpg */, + 6BF94B1A29F9AA6E0024C256 /* tvingCash.png */, + 6BF94B3E29FA8D950024C256 /* notification.png */, + 6BF94B3D29FA8D950024C256 /* settings.png */, + 6BF94B1929F9AA6E0024C256 /* tvingSubscribe.png */, 6B59452929F5C2E60087A4C3 /* btn_before.png */, + 6BF94B0B29F85D770024C256 /* nextBtn.png */, 6B59452329F5C2440087A4C3 /* eye-slash.png */, + 6B09E73229F6FB4E00EFECAB /* doosan.png */, 6B59452129F5C2380087A4C3 /* eye-non-slash.png */, 6B59452729F5C28E0087A4C3 /* tiving_logo.png */, 6B59452529F5C2500087A4C3 /* x-circle.png */, + 6B6C2F642A0019CE00F76247 /* pairing.png */, ); path = Image; sourceTree = ""; @@ -213,13 +318,121 @@ 6B59454B29F5C6180087A4C3 /* View */ = { isa = PBXGroup; children = ( - 6B59454C29F5C6300087A4C3 /* AddNickNameBottomSheetView.swift */, - 6B59454E29F5C6560087A4C3 /* LoginView.swift */, - 6B59455029F5C66D0087A4C3 /* WelcomeView.swift */, + 6B6C2F822A02942300F76247 /* Base */, + 6B6C2F7F2A02774F00F76247 /* Login */, + 6B6C2F802A02775B00F76247 /* Main */, + 6B6C2F812A02776D00F76247 /* MyPage */, ); path = View; sourceTree = ""; }; + 6B6C2F7C2A02770B00F76247 /* Login */ = { + isa = PBXGroup; + children = ( + 6B59451729F5C00B0087A4C3 /* LoginViewController.swift */, + ); + path = Login; + sourceTree = ""; + }; + 6B6C2F7D2A02771800F76247 /* Main */ = { + isa = PBXGroup; + children = ( + 6B09E73029F6F34200EFECAB /* MainViewController.swift */, + 6B6C2F692A024E3400F76247 /* MainHomeViewController.swift */, + 6B6C2F712A026C2C00F76247 /* MainLiveViewController.swift */, + 6B6C2F732A026C3E00F76247 /* MainTVViewController.swift */, + 6B6C2F752A026C4F00F76247 /* MainMovieViewController.swift */, + 6B6C2F772A026C6300F76247 /* MainParamountViewController.swift */, + 6B6C2F792A026C7200F76247 /* MainKidsViewController.swift */, + 6B6C2F8B2A02D92200F76247 /* MainBaseViewController.swift */, + ); + path = Main; + sourceTree = ""; + }; + 6B6C2F7E2A02772800F76247 /* MyPage */ = { + isa = PBXGroup; + children = ( + 6B09E72629F6ECFB00EFECAB /* MyPageViewController.swift */, + ); + path = MyPage; + sourceTree = ""; + }; + 6B6C2F7F2A02774F00F76247 /* Login */ = { + isa = PBXGroup; + children = ( + 6B59454C29F5C6300087A4C3 /* NickNameBottomSheetView.swift */, + 6B59454E29F5C6560087A4C3 /* LoginView.swift */, + ); + path = Login; + sourceTree = ""; + }; + 6B6C2F802A02775B00F76247 /* Main */ = { + isa = PBXGroup; + children = ( + 6B09E72E29F6F33200EFECAB /* MainView.swift */, + 6B6C2F5829FECF2000F76247 /* MainViewSectionHeader.swift */, + 6B6C2F622A00180300F76247 /* MainViewTopMenu.swift */, + 6B6C2F672A0120E300F76247 /* MainViewPagingIndicator.swift */, + 6B6C2F852A029CA700F76247 /* MainViewSegmentIndicator.swift */, + ); + path = Main; + sourceTree = ""; + }; + 6B6C2F812A02776D00F76247 /* MyPage */ = { + isa = PBXGroup; + children = ( + 6B09E72429F6ECE500EFECAB /* MyPageView.swift */, + 6BF94B1529F986170024C256 /* MyPageViewHeader.swift */, + ); + path = MyPage; + sourceTree = ""; + }; + 6B6C2F822A02942300F76247 /* Base */ = { + isa = PBXGroup; + children = ( + 6B6C2F832A02946000F76247 /* BottomMenu.swift */, + ); + path = Base; + sourceTree = ""; + }; + 6BF94B0529F845C50024C256 /* bottomBtnImg */ = { + isa = PBXGroup; + children = ( + 6BF94AFA29F8450F0024C256 /* homeGray.jpg */, + 6BF94AF729F8450E0024C256 /* homeWhite.jpg */, + 6BF94AF929F8450E0024C256 /* preGray.jpg */, + 6BF94AFC29F8450F0024C256 /* preWhite.jpg */, + 6BF94AF629F8450E0024C256 /* recordGray.jpg */, + 6BF94AF529F8450E0024C256 /* recordWhite.jpg */, + 6BF94AFB29F8450F0024C256 /* searchGray.jpg */, + 6BF94AF829F8450E0024C256 /* searchWhite.jpg */, + ); + path = bottomBtnImg; + sourceTree = ""; + }; + 6BF94B4129FAE91E0024C256 /* Classes & Structure */ = { + isa = PBXGroup; + children = ( + 6BF94B4229FAE94F0024C256 /* TvingUser.swift */, + 6BF94B1129F91CD90024C256 /* CustomTvingButton.swift */, + 6BF94B1329F92B3B0024C256 /* MyPageMenu.swift */, + 6BF94B4B29FD42CD0024C256 /* Contents.swift */, + 6B6C2F5E29FF9BC100F76247 /* ContentsSectionLayout.swift */, + 6BF94B4D29FD461C0024C256 /* MainViewContentsCell.swift */, + ); + path = "Classes & Structure"; + sourceTree = ""; + }; + 6BF94B4429FAE9B70024C256 /* ViewController */ = { + isa = PBXGroup; + children = ( + 6B6C2F7C2A02770B00F76247 /* Login */, + 6B6C2F7D2A02771800F76247 /* Main */, + 6B6C2F7E2A02772800F76247 /* MyPage */, + ); + path = ViewController; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -239,6 +452,7 @@ packageProductDependencies = ( 6B59453429F5C48E0087A4C3 /* SnapKit */, 6B59453729F5C4AA0087A4C3 /* Then */, + 6B6C2F8E2A06227400F76247 /* Alamofire */, ); productName = GO_SOPT_Seminar_Assignment; productReference = 6B5944F929F5BE000087A4C3 /* GO_SOPT_Seminar_Assignment.app */; @@ -271,6 +485,7 @@ packageReferences = ( 6B59453329F5C48E0087A4C3 /* XCRemoteSwiftPackageReference "SnapKit" */, 6B59453629F5C4AA0087A4C3 /* XCRemoteSwiftPackageReference "Then" */, + 6B6C2F8D2A06227400F76247 /* XCRemoteSwiftPackageReference "Alamofire" */, ); productRefGroup = 6B5944FA29F5BE000087A4C3 /* Products */; projectDirPath = ""; @@ -286,16 +501,33 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6BF94B0129F8450F0024C256 /* preGray.jpg in Resources */, + 6BF94AFD29F8450F0024C256 /* recordWhite.jpg in Resources */, 6B59451C29F5C1370087A4C3 /* Pretendard-SemiBold.ttf in Resources */, + 6BF94B1E29FA5A120024C256 /* tvnJtbc.png in Resources */, + 6BF94B1B29F9AA6E0024C256 /* tvingSubscribe.png in Resources */, + 6BF94B0229F8450F0024C256 /* homeGray.jpg in Resources */, 6B59451D29F5C1370087A4C3 /* Pretendard-Medium.ttf in Resources */, + 6BF94B1C29F9AA6E0024C256 /* tvingCash.png in Resources */, 6B59451E29F5C1370087A4C3 /* Pretendard-Regular.ttf in Resources */, + 6BF94B0429F8450F0024C256 /* preWhite.jpg in Resources */, + 6B09E73329F6FB4E00EFECAB /* doosan.png in Resources */, 6B59452A29F5C2E60087A4C3 /* btn_before.png in Resources */, + 6BF94B4029FA8D950024C256 /* notification.png in Resources */, 6B59452429F5C2440087A4C3 /* eye-slash.png in Resources */, + 6B6C2F652A0019CE00F76247 /* pairing.png in Resources */, + 6BF94B3F29FA8D950024C256 /* settings.png in Resources */, 6B59450929F5BE010087A4C3 /* LaunchScreen.storyboard in Resources */, 6B59450629F5BE010087A4C3 /* Assets.xcassets in Resources */, + 6BF94B0329F8450F0024C256 /* searchGray.jpg in Resources */, 6B59452629F5C2500087A4C3 /* x-circle.png in Resources */, + 6BF94B0029F8450F0024C256 /* searchWhite.jpg in Resources */, + 6BF94B1029F91C0B0024C256 /* tvingImg.jpg in Resources */, + 6BF94AFE29F8450F0024C256 /* recordGray.jpg in Resources */, 6B59452829F5C28E0087A4C3 /* tiving_logo.png in Resources */, + 6BF94AFF29F8450F0024C256 /* homeWhite.jpg in Resources */, 6B59452229F5C2380087A4C3 /* eye-non-slash.png in Resources */, + 6BF94B0C29F85D770024C256 /* nextBtn.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -306,25 +538,49 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6BF94B1629F986170024C256 /* MyPageViewHeader.swift in Sources */, + 6BF94B4C29FD42CD0024C256 /* Contents.swift in Sources */, + 6B6C2F682A0120E300F76247 /* MainViewPagingIndicator.swift in Sources */, 6B59454029F5C5090087A4C3 /* UIFont+.swift in Sources */, - 6B59454A29F5C6030087A4C3 /* WelcomeViewController.swift in Sources */, - 6B59454D29F5C6300087A4C3 /* AddNickNameBottomSheetView.swift in Sources */, + 6B59454D29F5C6300087A4C3 /* NickNameBottomSheetView.swift in Sources */, + 6B6C2F7A2A026C7200F76247 /* MainKidsViewController.swift in Sources */, + 6BF94B1429F92B3B0024C256 /* MyPageMenu.swift in Sources */, 6B59453229F5C4090087A4C3 /* CustomTextField.swift in Sources */, + 6B6C2F762A026C4F00F76247 /* MainMovieViewController.swift in Sources */, 6B59451829F5C00B0087A4C3 /* LoginViewController.swift in Sources */, 6B59453A29F5C4BD0087A4C3 /* String+.swift in Sources */, + 6BF94B4329FAE94F0024C256 /* TvingUser.swift in Sources */, 6B59452C29F5C3AE0087A4C3 /* BaseViewController.swift in Sources */, + 6B6C2F742A026C3E00F76247 /* MainTVViewController.swift in Sources */, 6B59453C29F5C4D20087A4C3 /* UIButton+.swift in Sources */, 6B59452E29F5C3D20087A4C3 /* BaseView.swift in Sources */, 6B5944FD29F5BE000087A4C3 /* AppDelegate.swift in Sources */, + 6BF94B1229F91CD90024C256 /* CustomTvingButton.swift in Sources */, + 6BF94B1829F995B70024C256 /* CALayer+.swift in Sources */, 6B5944FF29F5BE000087A4C3 /* SceneDelegate.swift in Sources */, 6B59454829F5C5590087A4C3 /* UIView+.swift in Sources */, + 6BF94B0829F84C350024C256 /* LabelNextBtnTableViewCell.swift in Sources */, 6B59454F29F5C6560087A4C3 /* LoginView.swift in Sources */, + 6BF94B4E29FD461C0024C256 /* MainViewContentsCell.swift in Sources */, 6B59454629F5C5490087A4C3 /* UITextField+.swift in Sources */, 6B59453029F5C3F80087A4C3 /* CustomPasswordTextField.swift in Sources */, + 6B09E73129F6F34200EFECAB /* MainViewController.swift in Sources */, + 6B6C2F862A029CA700F76247 /* MainViewSegmentIndicator.swift in Sources */, + 6B6C2F722A026C2C00F76247 /* MainLiveViewController.swift in Sources */, + 6B6C2F5929FECF2000F76247 /* MainViewSectionHeader.swift in Sources */, + 6B6C2F782A026C6300F76247 /* MainParamountViewController.swift in Sources */, 6B59454429F5C5380087A4C3 /* UIStackView+.swift in Sources */, + 6B6C2F632A00180300F76247 /* MainViewTopMenu.swift in Sources */, + 6B6C2F842A02946000F76247 /* BottomMenu.swift in Sources */, + 6B6C2F6A2A024E3400F76247 /* MainHomeViewController.swift in Sources */, + 6B09E72729F6ECFB00EFECAB /* MyPageViewController.swift in Sources */, + 6B6C2F8C2A02D92200F76247 /* MainBaseViewController.swift in Sources */, 6B59454229F5C51D0087A4C3 /* UILabel+.swift in Sources */, + 6B6C2F5F29FF9BC100F76247 /* ContentsSectionLayout.swift in Sources */, + 6B09E72529F6ECE500EFECAB /* MyPageView.swift in Sources */, + 6B09E72F29F6F33200EFECAB /* MainView.swift in Sources */, + 6B09E72929F6ED7900EFECAB /* UIImage+.swift in Sources */, 6B59453E29F5C4E90087A4C3 /* UIColor+.swift in Sources */, - 6B59455129F5C66D0087A4C3 /* WelcomeView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -461,6 +717,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + BASE_URL = "http://54.180.123.11 "; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 6ML57N96S3; @@ -489,6 +746,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + BASE_URL = "http://54.180.123.11 "; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 6ML57N96S3; @@ -552,6 +810,14 @@ minimumVersion = 3.0.0; }; }; + 6B6C2F8D2A06227400F76247 /* XCRemoteSwiftPackageReference "Alamofire" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Alamofire/Alamofire"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.0.0; + }; + }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ @@ -565,6 +831,11 @@ package = 6B59453629F5C4AA0087A4C3 /* XCRemoteSwiftPackageReference "Then" */; productName = Then; }; + 6B6C2F8E2A06227400F76247 /* Alamofire */ = { + isa = XCSwiftPackageProductDependency; + package = 6B6C2F8D2A06227400F76247 /* XCRemoteSwiftPackageReference "Alamofire" */; + productName = Alamofire; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = 6B5944F129F5BE000087A4C3 /* Project object */; diff --git a/GO_SOPT_Seminar_Assignment.xcodeproj/xcuserdata/yeahh.xcuserdatad/xcschemes/xcschememanagement.plist b/GO_SOPT_Seminar_Assignment.xcodeproj/xcuserdata/yeahh.xcuserdatad/xcschemes/xcschememanagement.plist index 7922526..bcea214 100644 --- a/GO_SOPT_Seminar_Assignment.xcodeproj/xcuserdata/yeahh.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/GO_SOPT_Seminar_Assignment.xcodeproj/xcuserdata/yeahh.xcuserdatad/xcschemes/xcschememanagement.plist @@ -31,5 +31,13 @@ 1 + SuppressBuildableAutocreation + + 6B5944F829F5BE000087A4C3 + + primary + + + diff --git a/GO_SOPT_Seminar_Assignment/Base.lproj/LaunchScreen.storyboard b/GO_SOPT_Seminar_Assignment/Base.lproj/LaunchScreen.storyboard index 865e932..5026f36 100644 --- a/GO_SOPT_Seminar_Assignment/Base.lproj/LaunchScreen.storyboard +++ b/GO_SOPT_Seminar_Assignment/Base.lproj/LaunchScreen.storyboard @@ -1,8 +1,11 @@ - - + + + - + + + @@ -11,10 +14,10 @@ - + - + @@ -22,4 +25,9 @@ + + + + + diff --git a/GO_SOPT_Seminar_Assignment/Info.plist b/GO_SOPT_Seminar_Assignment/Info.plist index 705be7b..93954c4 100644 --- a/GO_SOPT_Seminar_Assignment/Info.plist +++ b/GO_SOPT_Seminar_Assignment/Info.plist @@ -2,6 +2,15 @@ + BASE_URL + $(BASE_URL) + CFBundleName + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + UIAppFonts Pretendard-SemiBold.ttf diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/Contents.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/Contents.swift new file mode 100644 index 0000000..c831319 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/Contents.swift @@ -0,0 +1,50 @@ +// +// Contents.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/29. +// + +import UIKit + +struct Contents { + let image: UIImage + var name: String? = nil + var subName: String? = nil + let sectionNum: Int +} + +extension Contents { + static func dummy() -> [[Contents]] { + let contents = [[Contents(image: .main1, sectionNum: 0), + Contents(image: .main2, sectionNum: 0), + Contents(image: .main3, sectionNum: 0), + Contents(image: .main4, sectionNum: 0)], + [Contents(image: .loardOfTheKingPoster, name: "반지의 제왕", sectionNum: 1), + Contents(image: .signalPoster, name: "시그널", sectionNum: 1), + Contents(image: .harryPotterPoster, name: "해리포터", sectionNum: 1), + Contents(image: .suzumePoster, name: "스즈메의 문단속", sectionNum: 1), + Contents(image: .mtPoster, name: "청춘MT", sectionNum: 1)], + [Contents(image: .banner1, sectionNum: 3), + Contents(image: .banner2, sectionNum: 3), + Contents(image: .banner3, sectionNum: 3)], + [Contents(image: .live1, name: "tvN Show", subName: "신서유기5 10화\n24.3%", sectionNum: 4), + Contents(image: .live2, name: "JTBC", subName: "JTBC 뉴스\n10.7%", sectionNum: 4), + Contents(image: .live3, name: "tvN", subName: "부산 촌놈 3화\n7.4%", sectionNum: 4)], + [Contents(image: .paramount1, name: "그리스: 라이즈 오브 핑크 레이디스", sectionNum: 5), + Contents(image: .paramount2, name: "옐로우재킷 시즌2", sectionNum: 5), + Contents(image: .paramount3, name: "래빗홀", sectionNum: 5), + Contents(image: .paramount4, name: "메이어 오브 킹스타운", sectionNum: 5), + Contents(image: .paramount5, name: "1923", sectionNum: 5)]] + + return contents + } + + static func sectionName() -> [String] { + return ["", "티빙에서 꼭 봐야하는 콘텐츠", "", "인기 LIVE 채널", "파라마운트+의 따끈한 신작"] + } + + static func sectionLayout() -> [String] { + return ["Header", "Normal", "Banner", "Live", "Normal"] + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/ContentsSectionLayout.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/ContentsSectionLayout.swift new file mode 100644 index 0000000..79b8848 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/ContentsSectionLayout.swift @@ -0,0 +1,71 @@ +// +// MainViewSection.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/01. +// + +import UIKit + +@frozen +enum ContentsSectionLayout: String { + + case header = "Header" + case normal = "Normal" + case live = "Live" + case banner = "Banner" + + var itemSize: NSCollectionLayoutSize { + switch self { + case .header: + return NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0) ,heightDimension: .absolute(520)) + case .normal: + return NSCollectionLayoutSize(widthDimension: .absolute(98) ,heightDimension: .absolute(160)) + case .live: + return NSCollectionLayoutSize(widthDimension: .absolute(160) ,heightDimension: .absolute(140)) + case .banner: + return NSCollectionLayoutSize(widthDimension: .absolute(300) ,heightDimension: .absolute(100)) + } + } + + var interGroupSpacing: CGFloat { + switch self { + case .header: + return 0 + default: + return 10 + } + } + + var orthogonalScrollinBehavior: UICollectionLayoutSectionOrthogonalScrollingBehavior { + switch self { + case .header: + return .groupPaging + default: + return .continuous + } + } + + var header: [NSCollectionLayoutBoundarySupplementaryItem] { + switch self { + case .normal, .live: + let headerSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .absolute(30)) + let header = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: headerSize, elementKind: UICollectionView.elementKindSectionHeader, alignment: .top) + return [header] + default: + return [] + } + } + + var footer: [NSCollectionLayoutBoundarySupplementaryItem] { + switch self { + case .header: + let footerSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .absolute(20)) + let footer = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: footerSize, elementKind: UICollectionView.elementKindSectionFooter, alignment: .bottom) + return [footer] + default: + return [] + } + } + +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/CustomTvingButton.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/CustomTvingButton.swift new file mode 100644 index 0000000..6950d73 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/CustomTvingButton.swift @@ -0,0 +1,37 @@ +// +// TvingButton.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/26. +// + +import UIKit + +import SnapKit +import Then + +class CustomTvingButton: UIButton { + + override init(frame: CGRect) { + super.init(frame: frame) + + style() + setLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func style() { + self.setTitleColor(.tvingGray2, for: .normal) + self.titleLabel?.textAlignment = .center + self.layer.borderColor = UIColor.tvingGray4.cgColor + self.layer.borderWidth = 1 + self.layer.cornerRadius = 3 + } + + func setLayout() { + + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/MainViewContentsCell.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/MainViewContentsCell.swift new file mode 100644 index 0000000..5339fa1 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/MainViewContentsCell.swift @@ -0,0 +1,94 @@ +// +// ContentsCollectionViewCell.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/29. +// + +import UIKit + +class MainViewContentsCell: UICollectionViewCell { + + static let identifier = "ContentsCell" + + private let contentsStackView = UIStackView() + private let contentsImg = UIImageView() + private let contentsName = UILabel() + private let contentsSubName = UILabel() + + var pageIndicatorNum: Int = 0 + + override init(frame: CGRect) { + super.init(frame: frame) + + setStyle() + setHierarchy() + setLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + +extension MainViewContentsCell { + + func setStyle() { + contentsStackView.do { + $0.axis = .vertical + $0.distribution = .fill + } + contentsName.do { + $0.font = .tvingMedium(ofSize: 12) + $0.textColor = .tvingGray2 + } + contentsSubName.do { + $0.font = .tvingRegular(ofSize: 10) + $0.textColor = .tvingGray2 + $0.numberOfLines = 2 + } + } + + func setHierarchy() { + contentView.addSubviews(contentsStackView) + contentsStackView.addArrangedSubviews(contentsImg, + contentsName, + contentsSubName) + } + + func setLayout() { + contentsStackView.snp.makeConstraints { + $0.edges.equalToSuperview() + } + contentsImg.snp.makeConstraints { + $0.leading.trailing.equalToSuperview() + } + contentsName.snp.makeConstraints { + $0.height.equalTo(20) + $0.leading.trailing.equalToSuperview() + } + contentsSubName.snp.makeConstraints { + $0.height.equalTo(25) + $0.leading.trailing.equalToSuperview() + } + } + + func configureCell(_ contents: Contents) { + contentsImg.image = contents.image + contentsName.text = contents.name + contentsSubName.text = contents.subName + + if (contentsName.text == nil) { + contentsName.isHidden = true + } else { + contentsName.isHidden = false + } + if (contentsSubName.text == nil) { + contentsSubName.isHidden = true + } else { + contentsSubName.isHidden = false + } + } +} + diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/MyPageMenu.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/MyPageMenu.swift new file mode 100644 index 0000000..d7f98c0 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/MyPageMenu.swift @@ -0,0 +1,28 @@ +// +// MypageMenu.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/26. +// + +import UIKit + +struct MyPageMenu { + let menuName: String +} + +extension MyPageMenu { + + static func dummy() -> [[MyPageMenu]] { + return [[MyPageMenu(menuName: "이용권"), + MyPageMenu(menuName: "1:1 문의내역"), + MyPageMenu(menuName: "예약알림"), + MyPageMenu(menuName: "회원정보 수정"), + MyPageMenu(menuName: "프로모션 정보 수신 동의")], + [MyPageMenu(menuName: "공지사항"), + MyPageMenu(menuName: "이벤트"), + MyPageMenu(menuName: "고객센터"), + MyPageMenu(menuName: "티빙 알아보기")]] + } +} + diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/TvingUser.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/TvingUser.swift new file mode 100644 index 0000000..dbb350a --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/Classes & Structure/TvingUser.swift @@ -0,0 +1,24 @@ +// +// TvingUser.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/28. +// + +import Foundation + +class TvingUser { + + var id: String? + var password: String? + var nickName: String? + + func getNickNameOrId() -> String { + if let nickName = self.nickName { + return nickName + } else { + guard let id = self.id?.components(separatedBy: "@").first else { return "" } + return id + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/View/Base/BottomMenu.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Base/BottomMenu.swift new file mode 100644 index 0000000..499ce26 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Base/BottomMenu.swift @@ -0,0 +1,80 @@ +// +// BottomMenu.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/03. +// + +import UIKit + +class BottomMenu: UIView { + + let bottomMenu = UIStackView() + let bottomHomeBtn = UIButton() + let bottomPreBtn = UIButton() + let bottomSearchBtn = UIButton() + let bottomRecordBtn = UIButton() + + override init(frame: CGRect) { + super.init(frame: frame) + + setStyle() + setHierarchy() + setLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setStyle() { + self.backgroundColor = .black + + bottomMenu.do { + $0.axis = .horizontal + $0.distribution = .fillEqually + $0.backgroundColor = .black + } + bottomHomeBtn.do { + $0.setImage(.bottomHomeW, for: .normal) + $0.imageView?.contentMode = .scaleAspectFit + } + bottomPreBtn.do { + $0.setImage(.bottomPreG, for: .normal) + $0.imageView?.contentMode = .scaleAspectFit + } + bottomSearchBtn.do { + $0.setImage(.bottomSearchG, for: .normal) + $0.imageView?.contentMode = .scaleAspectFit + } + bottomRecordBtn.do { + $0.setImage(.bottomRecordG, for: .normal) + $0.imageView?.contentMode = .scaleAspectFit + } + } + private func setHierarchy() { + self.addSubview(bottomMenu) + + bottomMenu.addArrangedSubviews(bottomHomeBtn, + bottomPreBtn, + bottomSearchBtn, + bottomRecordBtn) + } + private func setLayout() { + bottomMenu.snp.makeConstraints { + $0.edges.equalToSuperview() + } + bottomHomeBtn.snp.makeConstraints { + $0.top.bottom.equalToSuperview() + } + bottomPreBtn.snp.makeConstraints { + $0.top.bottom.equalToSuperview() + } + bottomSearchBtn.snp.makeConstraints { + $0.top.bottom.equalToSuperview() + } + bottomRecordBtn.snp.makeConstraints { + $0.top.bottom.equalToSuperview() + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/View/Login/LoginView.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Login/LoginView.swift new file mode 100644 index 0000000..528e3ad --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Login/LoginView.swift @@ -0,0 +1,210 @@ +// +// LoginView.swift +// GO_SOPT_Seminar_Assingment +// +// Created by 김다예 on 2023/04/16. +// + +import UIKit + +class LoginView: BaseView { + + // MARK: - property + + private let mainLabel = UILabel() + + let idTextField = CustomTextField() + let idInvalidLabel = UILabel() + let passwordTextField = CustomPasswordTextField() + lazy var logInBtn = UIButton() + + private let idPasswordStackView = UIStackView() + lazy var findIdBtn = UIButton() + lazy var findPasswordBtn = UIButton() + + private let makeAccountStackView = UIStackView() + let askExistAccountLabel = UILabel() + lazy var goToMakeNicknameBtn = UIButton() + + lazy var backBtn = UIButton() + + // MARK: - style + + override func setStyle() { + super.setStyle() + + mainLabel.do { + $0.text = "TVING ID 로그인" + $0.font = .tvingMedium(ofSize: 23) + $0.textColor = .tvingGray1 + $0.textAlignment = .center + } + + idTextField.do { + $0.placeholder = "이메일" + $0.setPlaceholderColor(.tvingGray2) + $0.font = .tvingMedium(ofSize: 15) + $0.textColor = .tvingGray2 + $0.backgroundColor = .tvingGray4 + $0.keyboardType = .emailAddress + } + + idInvalidLabel.do { + $0.textColor = .systemRed + $0.font = .systemFont(ofSize: 12) + $0.text = "* 올바르지 않은 이메일 형식입니다 😭" + $0.isHidden = true + } + + passwordTextField.do { + $0.placeholder = "비밀번호" + $0.setPlaceholderColor(.tvingGray2) + $0.font = .tvingMedium(ofSize: 15) + $0.textColor = .tvingGray2 + $0.backgroundColor = .tvingGray4 + $0.keyboardType = .asciiCapable + } + + logInBtn.do { + $0.setTitle("로그인하기", for: .normal) + $0.setTitleColor(.tvingGray2, for: .normal) + $0.titleLabel?.font = .tvingMedium(ofSize: 14) + $0.titleLabel?.textAlignment = .center + $0.layer.borderColor = UIColor.tvingGray4.cgColor + $0.layer.borderWidth = 1 + $0.layer.cornerRadius = 3 + $0.isEnabled = false + } + + idPasswordStackView.do { + $0.axis = .horizontal + $0.distribution = .fill + $0.alignment = .center + $0.spacing = 40 + } + + findIdBtn.do { + $0.setTitle("아이디 찾기", for: .normal) + $0.setTitleColor(.tvingGray2, for: .normal) + $0.titleLabel?.font = .tvingMedium(ofSize: 14) + $0.titleLabel?.textAlignment = .center + } + + findPasswordBtn.do { + $0.setTitle("비밀번호 찾기", for: .normal) + $0.setTitleColor(.tvingGray2, for: .normal) + $0.titleLabel?.font = .tvingMedium(ofSize: 14) + $0.titleLabel?.textAlignment = .center + } + + makeAccountStackView.do { + $0.axis = .horizontal + $0.distribution = .fill + $0.alignment = .center + $0.spacing = 20 + } + + askExistAccountLabel.do { + $0.text = "아직 계정이 없으신가요?" + $0.font = .tvingRegular(ofSize: 14) + $0.textColor = .tvingGray3 + $0.textAlignment = .center + } + + goToMakeNicknameBtn.do { + $0.setTitle("닉네임 만들러가기", for: .normal) + $0.setTitleColor(.tvingGray2, for: .normal) + $0.titleLabel?.font = .tvingRegular(ofSize: 14) + $0.titleLabel?.textAlignment = .center + $0.setUnderline() + } + + backBtn.do { + $0.setImage(UIImage(named: "btn_before"), for: .normal) + } + } + + // MARK: - layout + + override func setHierarchy() { + self.addSubviews(mainLabel, + idTextField, + idInvalidLabel, + passwordTextField, + logInBtn, + idPasswordStackView, + makeAccountStackView, + backBtn) + idPasswordStackView.addArrangedSubviews(findIdBtn, + findPasswordBtn) + makeAccountStackView.addArrangedSubviews(askExistAccountLabel, + goToMakeNicknameBtn) + } + + + override func setLayout() { + + mainLabel.snp.makeConstraints{ + $0.height.equalTo(37) + $0.top.equalTo(self.safeAreaLayoutGuide).inset(50) + $0.leading.trailing.equalToSuperview().inset(100) + } + + idTextField.snp.makeConstraints{ + $0.height.equalTo(52) + $0.top.equalTo(mainLabel.snp.bottom).offset(31) + $0.leading.trailing.equalToSuperview().inset(20) + } + + passwordTextField.snp.makeConstraints{ + $0.height.equalTo(52) + $0.top.equalTo(idTextField.snp.bottom).offset(7) + $0.leading.trailing.equalToSuperview().inset(20) + } + + logInBtn.snp.makeConstraints{ + $0.height.equalTo(52) + $0.top.equalTo(passwordTextField.snp.bottom).offset(21) + $0.leading.trailing.equalToSuperview().inset(20) + } + + idPasswordStackView.snp.makeConstraints { + $0.height.equalTo(25) + $0.top.equalTo(logInBtn.snp.bottom).offset(30) + $0.centerX.equalToSuperview().inset(80) + } + + makeAccountStackView.snp.makeConstraints { + $0.height.equalTo(25) + $0.top.equalTo(idPasswordStackView.snp.bottom).offset(30) + $0.centerX.equalToSuperview().inset(50) + } + + backBtn.snp.makeConstraints{ + $0.height.equalTo(15) + $0.width.equalTo(8) + $0.top.equalTo(self.safeAreaLayoutGuide).inset(25) + $0.leading.equalToSuperview().inset(24) + } + + findIdBtn.snp.makeConstraints{ + $0.width.equalTo(70) + $0.height.equalTo(22) + } + + findPasswordBtn.snp.makeConstraints{ + $0.width.equalTo(80) + $0.height.equalTo(22) + } + + askExistAccountLabel.snp.makeConstraints{ + $0.width.equalTo(140) + $0.height.equalTo(22) + } + + goToMakeNicknameBtn.snp.makeConstraints{ + $0.width.equalTo(128) + $0.height.equalTo(22) + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/View/AddNickNameBottomSheetView.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Login/NickNameBottomSheetView.swift similarity index 54% rename from GO_SOPT_Seminar_Assignment/Local/TVING/View/AddNickNameBottomSheetView.swift rename to GO_SOPT_Seminar_Assignment/Local/TVING/View/Login/NickNameBottomSheetView.swift index d646821..9f5dc9c 100644 --- a/GO_SOPT_Seminar_Assignment/Local/TVING/View/AddNickNameBottomSheetView.swift +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Login/NickNameBottomSheetView.swift @@ -10,48 +10,21 @@ import UIKit import SnapKit import Then -final class AddNickNameBottomSheetView: UIView { +final class NickNameBottomSheetView: UIView { + // MARK: - Property + let bottomSheetHeight = UIScreen.main.bounds.height / 2 - let dimmendView = UIView().then { - $0.backgroundColor = .black.withAlphaComponent(0.5) - } - - private lazy var dragIndicatior = UIView().then { - $0.backgroundColor = .tvingGray1 - $0.layer.cornerRadius = 3 - } - - let bottomSheetView = UIView().then { - $0.backgroundColor = .white - $0.layer.cornerRadius = 12 - $0.layer.maskedCorners = [.layerMaxXMinYCorner, .layerMinXMinYCorner] // 좌우측 하단은 그대로 - } - - private let nickNameMainLabel = UILabel().then { - $0.text = "닉네임을 입력해주세요" - $0.font = .tvingMedium(ofSize: 23) - } - - let nickNameTextField = CustomTextField().then { - $0.placeholder = "닉네임" - $0.setPlaceholderColor(.tvingGray1) - $0.textColor = .black - $0.backgroundColor = .tvingGray2 - $0.font = .tvingMedium(ofSize: 14) - } - - lazy var saveNickNameBtn = UIButton().then { - $0.setTitle("저장하기", for: .normal) - $0.titleLabel?.font = .tvingMedium(ofSize: 16) - $0.titleLabel?.textAlignment = .center - $0.titleLabel?.textColor = .tvingGray2 - $0.backgroundColor = .black - $0.layer.cornerRadius = 12 - $0.isEnabled = false - } + let dimmendView = UIView() + private lazy var dragIndicatior = UIView() + let bottomSheetView = UIView() + private let nickNameMainLabel = UILabel() + let nickNameTextField = CustomTextField() + lazy var saveNickNameBtn = UIButton() + // MARK: - init + override init(frame: CGRect) { super.init(frame: frame) @@ -65,12 +38,53 @@ final class AddNickNameBottomSheetView: UIView { } } -private extension AddNickNameBottomSheetView { +private extension NickNameBottomSheetView { - func style() { + // MARK: - style + func style() { + + dimmendView.do { + $0.backgroundColor = .black.withAlphaComponent(0.5) + } + + dragIndicatior.do { + $0.backgroundColor = .tvingGray1 + $0.layer.cornerRadius = 3 + } + + bottomSheetView.do { + $0.backgroundColor = .white + $0.layer.cornerRadius = 12 + $0.layer.maskedCorners = [.layerMaxXMinYCorner, .layerMinXMinYCorner] // 좌우측 하단은 그대로 + } + + nickNameMainLabel.do { + $0.text = "닉네임을 입력해주세요" + $0.font = .tvingMedium(ofSize: 23) + } + + nickNameTextField.do { + $0.placeholder = "닉네임" + $0.setPlaceholderColor(.tvingGray1) + $0.textColor = .black + $0.backgroundColor = .tvingGray2 + $0.font = .tvingMedium(ofSize: 14) + } + + saveNickNameBtn.do { + $0.setTitle("저장하기", for: .normal) + $0.titleLabel?.font = .tvingMedium(ofSize: 16) + $0.titleLabel?.textAlignment = .center + $0.titleLabel?.textColor = .tvingGray2 + $0.backgroundColor = .black + $0.layer.cornerRadius = 12 + $0.isEnabled = false + } } + // MARK: - layout + func hierarchy() { self.addSubviews(dimmendView, dragIndicatior, diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/View/LoginView.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/View/LoginView.swift deleted file mode 100644 index 5f10a62..0000000 --- a/GO_SOPT_Seminar_Assignment/Local/TVING/View/LoginView.swift +++ /dev/null @@ -1,205 +0,0 @@ -// -// LoginView.swift -// GO_SOPT_Seminar_Assingment -// -// Created by 김다예 on 2023/04/16. -// - -import UIKit - -class LoginView: UIView { - - // MARK: - Object Setting - - private let mainLabel = UILabel().then { - $0.text = "TVING ID 로그인" - $0.font = .tvingMedium(ofSize: 23) - $0.textColor = .tvingGray1 - $0.textAlignment = .center - } - - let idTextField = CustomTextField().then { - $0.placeholder = "이메일" - $0.setPlaceholderColor(.tvingGray2) - $0.font = .tvingMedium(ofSize: 15) - $0.textColor = .tvingGray2 - $0.backgroundColor = .tvingGray4 - $0.keyboardType = .emailAddress - } - - let idInvalidLabel = UILabel().then { - $0.textColor = .systemRed - $0.font = .systemFont(ofSize: 12) - $0.text = "* 올바르지 않은 이메일 형식입니다 😭" - $0.isHidden = true - } - - let passwordTextField = CustomPasswordTextField().then { - $0.placeholder = "비밀번호" - $0.setPlaceholderColor(.tvingGray2) - $0.font = .tvingMedium(ofSize: 15) - $0.textColor = .tvingGray2 - $0.backgroundColor = .tvingGray4 - $0.keyboardType = .asciiCapable - } - - lazy var logInBtn = UIButton().then { - $0.setTitle("로그인하기", for: .normal) - $0.setTitleColor(.tvingGray2, for: .normal) - $0.titleLabel?.font = .tvingMedium(ofSize: 14) - $0.titleLabel?.textAlignment = .center - $0.layer.borderColor = UIColor.tvingGray4.cgColor - $0.layer.borderWidth = 1 - $0.layer.cornerRadius = 3 - $0.isEnabled = false - } - - private let idPasswordStackView = UIStackView().then { - $0.axis = .horizontal - $0.distribution = .fill - $0.alignment = .center - $0.spacing = 40 - } - - lazy var findIdBtn = UIButton().then { - $0.setTitle("아이디 찾기", for: .normal) - $0.setTitleColor(.tvingGray2, for: .normal) - $0.titleLabel?.font = .tvingMedium(ofSize: 14) - $0.titleLabel?.textAlignment = .center - } - - lazy var findPasswordBtn = UIButton().then { - $0.setTitle("비밀번호 찾기", for: .normal) - $0.setTitleColor(.tvingGray2, for: .normal) - $0.titleLabel?.font = .tvingMedium(ofSize: 14) - $0.titleLabel?.textAlignment = .center - } - - private let makeAccountStackView = UIStackView().then { - $0.axis = .horizontal - $0.distribution = .fill - $0.alignment = .center - $0.spacing = 20 - } - - let askExistAccountLabel = UILabel().then { - $0.text = "아직 계정이 없으신가요?" - $0.font = .tvingRegular(ofSize: 14) - $0.textColor = .tvingGray3 - $0.textAlignment = .center - } - - lazy var goToMakeNicknameBtn = UIButton().then { - $0.setTitle("닉네임 만들러가기", for: .normal) - $0.setTitleColor(.tvingGray2, for: .normal) - $0.titleLabel?.font = .tvingRegular(ofSize: 14) - $0.titleLabel?.textAlignment = .center - $0.setUnderline() - } - - lazy var backBtn = UIButton().then { - $0.setImage(UIImage(named: "btn_before"), for: .normal) - } - - override init(frame: CGRect) { - super.init(frame: frame) - - style() - hierarchy() - setLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - -} - -private extension LoginView { - - func style() { - self.backgroundColor = .black - } - - func hierarchy() { - self.addSubviews(mainLabel, - idTextField, - idInvalidLabel, - passwordTextField, - logInBtn, - idPasswordStackView, - makeAccountStackView, - backBtn) - idPasswordStackView.addArrangedSubviews(findIdBtn, - findPasswordBtn) - makeAccountStackView.addArrangedSubviews(askExistAccountLabel, - goToMakeNicknameBtn) - } - - - func setLayout() { - - mainLabel.snp.makeConstraints{ - $0.height.equalTo(37) - $0.top.equalTo(self.safeAreaLayoutGuide).inset(50) - $0.leading.trailing.equalToSuperview().inset(100) - } - - idTextField.snp.makeConstraints{ - $0.height.equalTo(52) - $0.top.equalTo(mainLabel.snp.bottom).offset(31) - $0.leading.trailing.equalToSuperview().inset(20) - } - - passwordTextField.snp.makeConstraints{ - $0.height.equalTo(52) - $0.top.equalTo(idTextField.snp.bottom).offset(7) - $0.leading.trailing.equalToSuperview().inset(20) - } - - logInBtn.snp.makeConstraints{ - $0.height.equalTo(52) - $0.top.equalTo(passwordTextField.snp.bottom).offset(21) - $0.leading.trailing.equalToSuperview().inset(20) - } - - idPasswordStackView.snp.makeConstraints { - $0.height.equalTo(25) - $0.top.equalTo(logInBtn.snp.bottom).offset(30) - $0.centerX.equalToSuperview().inset(80) - } - - makeAccountStackView.snp.makeConstraints { - $0.height.equalTo(25) - $0.top.equalTo(idPasswordStackView.snp.bottom).offset(30) - $0.centerX.equalToSuperview().inset(50) - } - - backBtn.snp.makeConstraints{ - $0.height.equalTo(15) - $0.width.equalTo(8) - $0.top.equalTo(self.safeAreaLayoutGuide).inset(25) - $0.leading.equalToSuperview().inset(24) - } - - findIdBtn.snp.makeConstraints{ - $0.width.equalTo(70) - $0.height.equalTo(22) - } - - findPasswordBtn.snp.makeConstraints{ - $0.width.equalTo(80) - $0.height.equalTo(22) - } - - askExistAccountLabel.snp.makeConstraints{ - $0.width.equalTo(140) - $0.height.equalTo(22) - } - - goToMakeNicknameBtn.snp.makeConstraints{ - $0.width.equalTo(128) - $0.height.equalTo(22) - } - } -} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainView.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainView.swift new file mode 100644 index 0000000..09abc1b --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainView.swift @@ -0,0 +1,47 @@ +// +// MainView.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/25. +// + +import UIKit + +import SnapKit +import Then + +class MainView: BaseView { + + let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewLayout()) + + // MARK: - style + + override func setStyle() { + super.setStyle() + + collectionView.do { + $0.register(MainViewContentsCell.self, forCellWithReuseIdentifier: MainViewContentsCell.identifier) + $0.register(MainViewSectionHeader.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: MainViewSectionHeader.identifier) + $0.register(MainViewPagingIndicator.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: MainViewPagingIndicator.identifier) + $0.backgroundColor = .black + $0.contentInsetAdjustmentBehavior = .never + $0.showsVerticalScrollIndicator = false + } + } + + // MARK: - layout + + override func setHierarchy() { + self.addSubviews(collectionView) + } + + override func setLayout() { + collectionView.snp.makeConstraints { + $0.edges.equalToSuperview() + } + } +} + + + + diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainViewPagingIndicator.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainViewPagingIndicator.swift new file mode 100644 index 0000000..e6dd769 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainViewPagingIndicator.swift @@ -0,0 +1,65 @@ +// +// MainViewPagingIndicatorView.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/02. +// + +import UIKit + +class MainViewPagingIndicator: UICollectionReusableView { + + static let identifier = "MainViewHeaderPagingFooter" + + private let pageControl = UIPageControl() + + var currentPage: Int = 0 { + didSet { + pageControl.currentPage = currentPage + } + } + var numberOfPages: Int = 0 { + didSet { + pageControl.numberOfPages = numberOfPages + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + + setStyle() + setHierarchy() + setLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func setStyle() { + pageControl.do { + $0.hidesForSinglePage = true + $0.pageIndicatorTintColor = .tvingGray3 + $0.currentPageIndicatorTintColor = .tvingGray1 + $0.transform = CGAffineTransform(scaleX: 0.7, y: 0.7) + if #available(iOS 14.0, *) { + $0.allowsContinuousInteraction = false + } + } + } + + func setHierarchy() { + self.addSubviews(pageControl) + } + func setLayout() { + pageControl.snp.makeConstraints { + $0.top.bottom.leading.equalToSuperview() + } + } +} + +extension MainViewPagingIndicator: dataBindProtocol { + func dataBind(page: Int) { + currentPage = page + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainViewSectionHeader.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainViewSectionHeader.swift new file mode 100644 index 0000000..1069fcf --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainViewSectionHeader.swift @@ -0,0 +1,54 @@ +// +// MainHeaderView.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/01. +// + +import UIKit + +class MainViewSectionHeader: UICollectionReusableView { + + static let identifier = "MainViewSectionHeader" + let mainLabel = UILabel() + private let seeAllButton = UIButton() + + override init(frame: CGRect) { + super.init(frame: frame) + + setStyle() + setHierarchy() + setLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func setStyle() { + mainLabel.do { + $0.font = .tvingSemiBold(ofSize: 15) + $0.textColor = .tvingGray1 + } + seeAllButton.do { + $0.setTitle("전체보기 >", for: .normal) + $0.titleLabel?.font = .tvingRegular(ofSize: 12) + $0.titleLabel?.textColor = .tvingGray2 + } + } + + func setHierarchy() { + self.addSubviews(mainLabel, + seeAllButton) + } + func setLayout() { + mainLabel.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.leading.equalToSuperview().inset(5) + } + seeAllButton.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.trailing.equalToSuperview().inset(10) + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainViewSegmentIndicator.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainViewSegmentIndicator.swift new file mode 100644 index 0000000..dbe9e9d --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainViewSegmentIndicator.swift @@ -0,0 +1,78 @@ +// +// MainViewSegmentIndicator.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/03. +// + +import UIKit + +import SnapKit +import Then + +class MainViewSegmentIndicator: UIView { + + private let trackView = UIView() + private let trackTintView = UIView() + + private var leftInsetConstraint: Constraint? + + var width: CGFloat? { + didSet { + guard let width = self.width else { return } + trackTintView.snp.updateConstraints { + $0.width.equalTo(width) + } + } + } + var leftInset: CGFloat? { + didSet { + guard let leftInset = leftInset else { return } + trackTintView.snp.updateConstraints { + $0.leading.equalToSuperview().inset(leftInset) + } + UIView.animate(withDuration: 0.1, animations: { + self.layoutIfNeeded() + }) + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + + setStyle() + setHierarchy() + setLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func setStyle() { + trackView.do { + $0.backgroundColor = .clear + } + trackTintView.do { + $0.backgroundColor = .white + $0.makeRounded(radius: 2) + } + + } + + func setHierarchy() { + self.addSubview(trackView) + trackView.addSubview(trackTintView) + } + + func setLayout() { + trackView.snp.makeConstraints { + $0.edges.equalToSuperview() + } + trackTintView.snp.makeConstraints { + $0.top.bottom.equalToSuperview() + $0.leading.equalToSuperview() + $0.width.equalTo(10) + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainViewTopMenu.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainViewTopMenu.swift new file mode 100644 index 0000000..5f1cf0e --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/View/Main/MainViewTopMenu.swift @@ -0,0 +1,171 @@ +// +// MainViewTopView.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/02. +// + +import UIKit + +class MainViewTopMenu: UIView { + + let topMenu = UIView() + let topLogoBtn = UIButton() + let topPairingBtn = UIButton() + let topprofileBtn = UIButton() + + let topSegment = UIScrollView() + let topSegmentLabelStackView = UIStackView() + let topSegmentIndicator = MainViewSegmentIndicator() + + let homeLabel = UILabel() + let liveLavel = UILabel() + let tvProgramLabel = UILabel() + let movieLabel = UILabel() + let paramountLabel = UILabel() + let kidsLabel = UILabel() + + + override init(frame: CGRect) { + super.init(frame: frame) + + setStyle() + setHierarchy() + setLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setStyle() { + self.backgroundColor = .clear + + topMenu.do { + $0.backgroundColor = .clear + } + topLogoBtn.do { + $0.setImage(.tvingWhiteLogo, for: .normal) + } + topPairingBtn.do { + $0.setImage(.pairingImg, for: .normal) + } + topprofileBtn.do { + $0.setImage(.profileImg.resized(withPercentage: 0.1), for: .normal) + $0.makeRounded(radius: 3) + } + + topSegment.do { + $0.backgroundColor = .clear + $0.showsHorizontalScrollIndicator = false + } + topSegmentLabelStackView.do { + $0.axis = .horizontal + $0.spacing = 30 + $0.distribution = .fillProportionally + } + homeLabel.do { + $0.text = "홈" + $0.textColor = .white + $0.font = .tvingMedium(ofSize: 17) + } + liveLavel.do { + $0.text = "실시간" + $0.textColor = .white + $0.font = .tvingMedium(ofSize: 17) + } + tvProgramLabel.do { + $0.text = "TV프로그램" + $0.textColor = .white + $0.font = .tvingMedium(ofSize: 17) + } + movieLabel.do { + $0.text = "영화" + $0.textColor = .white + $0.font = .tvingMedium(ofSize: 17) + } + paramountLabel.do { + $0.text = "파라마운트+" + $0.textColor = .white + $0.font = .tvingMedium(ofSize: 17) + } + kidsLabel.do { + $0.text = "키즈" + $0.textColor = .white + $0.font = .tvingMedium(ofSize: 17) + } + } + + private func setHierarchy() { + self.addSubviews(topMenu, + topSegment) + + topMenu.addSubviews(topLogoBtn, + topPairingBtn, + topprofileBtn) + + topSegment.addSubviews(topSegmentLabelStackView, + topSegmentIndicator) + + topSegmentLabelStackView.addArrangedSubviews(homeLabel, + liveLavel, + tvProgramLabel, + movieLabel, + paramountLabel, + kidsLabel) + } + private func setLayout() { + topMenu.snp.makeConstraints { + $0.height.equalTo(40) + $0.top.equalToSuperview().inset(50) + $0.leading.trailing.equalToSuperview() + } + topLogoBtn.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.leading.equalToSuperview().inset(10) + } + topPairingBtn.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.trailing.equalTo(topprofileBtn.snp.leading).offset(-20) + } + topprofileBtn.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.trailing.equalToSuperview().inset(10) + } + + topSegment.snp.makeConstraints { + $0.height.equalTo(40) + $0.top.equalTo(topMenu.snp.bottom) + $0.leading.bottom.trailing.equalToSuperview() + } + topSegmentLabelStackView.snp.makeConstraints { + $0.height.equalTo(25) + $0.top.equalToSuperview() + $0.leading.trailing.equalToSuperview().inset(10) + } + topSegmentIndicator.snp.makeConstraints { + $0.height.equalTo(5) + $0.leading.trailing.equalToSuperview().inset(10) + $0.top.equalTo(topSegmentLabelStackView.snp.bottom).offset(10) + } + + homeLabel.snp.makeConstraints { + $0.centerY.equalToSuperview() + } + liveLavel.snp.makeConstraints { + $0.centerY.equalToSuperview() + } + tvProgramLabel.snp.makeConstraints { + $0.centerY.equalToSuperview() + } + movieLabel.snp.makeConstraints { + $0.centerY.equalToSuperview() + } + paramountLabel.snp.makeConstraints { + $0.centerY.equalToSuperview() + } + kidsLabel.snp.makeConstraints { + $0.centerY.equalToSuperview() + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/View/MyPage/MyPageView.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/View/MyPage/MyPageView.swift new file mode 100644 index 0000000..c2c8ca7 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/View/MyPage/MyPageView.swift @@ -0,0 +1,102 @@ +// +// MyPageView.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/24. +// + +import UIKit + +import SnapKit +import Then + +class MyPageView: BaseView { + + // MARK: - Property + + private let topButtonMenu = UIView() + let myPageTableView = UITableView() + + let headerView = MyPageViewHeader() + let logOutBtn = CustomTvingButton() + + let topBackBtn = UIButton() + let topNotificationBtn = UIButton() + let topSettingBtn = UIButton() + + // MARK: - style + + override func setStyle() { + super.setStyle() + + myPageTableView.do { + $0.register(LabelNextBtnTableViewCell.self, + forCellReuseIdentifier: LabelNextBtnTableViewCell.identifier) + $0.rowHeight = 52 + $0.sectionHeaderTopPadding = 0 + $0.separatorStyle = .none + $0.backgroundColor = .black + $0.tableHeaderView = headerView + $0.tableFooterView = logOutBtn + $0.tableHeaderView?.frame.size.height = 280 + } + logOutBtn.do { + $0.setTitle("로그아웃", for: .normal) + $0.setTitleColor(.tvingGray1, for: .normal) + $0.titleLabel?.font = .tvingMedium(ofSize: 15) + $0.frame.size.height = 52 + } + + topBackBtn.do { + $0.setImage(.backImg, for: .normal) + } + topNotificationBtn.do { + $0.setImage(.notificationImg.resized(withPercentage: 0.05), for: .normal) + } + topSettingBtn.do { + $0.setImage(.settingImg.resized(withPercentage: 0.045), for: .normal) + } + } + + // MARK: - layout + + override func setHierarchy() { + + self.addSubviews(topButtonMenu, + myPageTableView) + + topButtonMenu.addSubviews(topBackBtn, + topNotificationBtn, + topSettingBtn) + } + + override func setLayout() { + + topButtonMenu.snp.makeConstraints { + $0.height.equalTo(52) + $0.top.equalTo(safeAreaLayoutGuide) + $0.leading.trailing.equalToSuperview() + } + + myPageTableView.snp.makeConstraints { + $0.top.equalTo(topButtonMenu.snp.bottom) + $0.bottom.equalTo(safeAreaLayoutGuide).inset(52) + $0.leading.trailing.equalToSuperview().inset(10) + } + + topBackBtn.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.leading.equalToSuperview().inset(20) + } + + topNotificationBtn.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.trailing.equalTo(topSettingBtn.snp.leading).offset(-15) + } + + topSettingBtn.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.trailing.equalToSuperview().inset(20) + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/View/MyPage/MyPageViewHeader.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/View/MyPage/MyPageViewHeader.swift new file mode 100644 index 0000000..540df7d --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/View/MyPage/MyPageViewHeader.swift @@ -0,0 +1,226 @@ +// +// MyPageHeaderView.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/27. +// + +import UIKit + +import SnapKit +import Then + +class MyPageViewHeader: UIStackView { + + // MARK: - Propterty + + private let profileView = UIView() + private let mySubscribeCashView = UIStackView() + private let subscriptionView = UIButton() + + var profileImg = UIImageView() + var profileName = UILabel() + var profileChangeBtn = CustomTvingButton() + + private let mySubscribe = UIView() + private let mySubscribeImg = UIImageView() + private let mySubscribeLabel = UILabel() + private let mySubscribeSubLabel = UILabel() + + private let myCash = UIView() + private let myCashImg = UIImageView() + private let myCashLabel = UILabel() + private let myCashCount = UILabel() + + private let subscriptionLabel = UILabel() + private let subscriptionAttachImg = NSTextAttachment() + private let subscriptionNextImg = UIImageView() + + // MARK: - init + + override init(frame: CGRect) { + super.init(frame: frame) + + setStyle() + setHierarchy() + setLayout() + } + + required init(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - style, hierarchy, layout + + func setStyle() { + self.axis = .vertical + self.spacing = 10 + self.distribution = .fill + + profileImg.do { + $0.image = .profileImg + $0.layer.cornerRadius = 15 + } + profileName.do { + $0.text = "다예" + $0.textColor = .white + $0.font = .tvingSemiBold(ofSize: 20) + } + profileChangeBtn.do { + $0.setTitle("프로필 전환", for: .normal) + $0.setTitleColor(.white, for: .normal) + $0.titleLabel?.font = .tvingMedium(ofSize: 10) + } + + mySubscribeCashView.do { + $0.backgroundColor = .tvingGray5 + $0.axis = .vertical + $0.layoutMargins = UIEdgeInsets(top: 12, left: 0, bottom: 12, right: 0) + $0.isLayoutMarginsRelativeArrangement = true + $0.distribution = .equalSpacing + $0.layer.cornerRadius = 3 + } + + mySubscribeImg.do { + $0.image = .utilizeImg.resized(withPercentage: 0.4) + } + mySubscribeLabel.do { + $0.text = "나의 이용권" + $0.font = .tvingMedium(ofSize: 13) + $0.textColor = .tvingGray2 + } + mySubscribeSubLabel.do { + $0.text = "사용중인 이용권이 없습니다." + $0.font = .tvingMedium(ofSize: 13) + $0.textColor = .tvingGray3 + } + + myCashImg.do { + $0.image = .cashImg.resized(withPercentage: 0.4) + } + myCashLabel.do { + $0.text = "티빙캐시" + $0.font = .tvingMedium(ofSize: 13) + $0.textColor = .tvingGray2 + } + myCashCount.do { + $0.text = "0" + $0.font = .tvingSemiBold(ofSize: 13) + $0.textColor = .white + } + + subscriptionView.do { + $0.backgroundColor = .tvingGray5 + $0.layer.cornerRadius = 3 + } + subscriptionAttachImg.do { + $0.image = .tvnJtbcImg.resized(withPercentage: 0.025) + } + subscriptionLabel.do{ + let firstString = NSAttributedString(string: "이용권을 구매하고 ") + let secondImg = NSAttributedString(attachment: subscriptionAttachImg) + let thirdString = NSAttributedString(string: " 등 인기 TV프로그램과\n다양한 영화 콘텐츠를 자유롭게 시청하세요!") + $0.labelWithImg(composition: firstString, secondImg, thirdString, spacing: 5) + $0.numberOfLines = 2 + $0.textColor = .tvingGray2 + $0.font = .tvingMedium(ofSize: 12) + } + subscriptionNextImg.do { + $0.image = .nextImg.resized(withPercentage: 0.65) + } + } + + func setHierarchy() { + + self.addArrangedSubviews(profileView, + mySubscribeCashView, + subscriptionView) + + profileView.addSubviews(profileImg, + profileName, + profileChangeBtn) + mySubscribeCashView.addArrangedSubviews(mySubscribe, + myCash) + subscriptionView.addSubviews(subscriptionLabel, + subscriptionNextImg) + + mySubscribe.addSubviews(mySubscribeImg, + mySubscribeLabel, + mySubscribeSubLabel) + myCash.addSubviews(myCashImg, + myCashLabel, + myCashCount) + } + + func setLayout() { + + profileView.snp.makeConstraints { + $0.height.equalTo(100) + } + mySubscribeCashView.snp.makeConstraints { + $0.height.equalTo(90) + } + subscriptionView.snp.makeConstraints { + $0.height.equalTo(70) + } + + profileImg.snp.makeConstraints { + $0.size.equalTo(72) + $0.centerY.equalToSuperview() + $0.leading.equalToSuperview().inset(10) + } + profileName.snp.makeConstraints { + $0.height.equalTo(60) + $0.centerY.equalToSuperview() + $0.leading.equalTo(profileImg.snp.trailing).offset(15) + } + profileChangeBtn.snp.makeConstraints { + $0.width.equalTo(80) + $0.height.equalTo(25) + $0.centerY.equalToSuperview() + $0.trailing.equalToSuperview() + } + + mySubscribe.snp.makeConstraints { + $0.height.equalTo(30) + } + myCash.snp.makeConstraints { + $0.height.equalTo(30) + } + + mySubscribeImg.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.leading.equalToSuperview().inset(15) + } + mySubscribeLabel.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.leading.equalTo(mySubscribeImg.snp.trailing).offset(10) + } + mySubscribeSubLabel.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.trailing.equalToSuperview().inset(15) + } + + myCashImg.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.leading.equalToSuperview().inset(15) + } + myCashLabel.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.leading.equalTo(myCashImg.snp.trailing).offset(10) + } + myCashCount.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.trailing.equalToSuperview().inset(15) + } + + subscriptionLabel.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.leading.equalToSuperview().inset(15) + } + subscriptionNextImg.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.trailing.equalToSuperview().inset(15) + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/View/WelcomeView.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/View/WelcomeView.swift deleted file mode 100644 index 9b36d84..0000000 --- a/GO_SOPT_Seminar_Assignment/Local/TVING/View/WelcomeView.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// WelcomeView.swift -// GO_SOPT_Seminar_Assingment -// -// Created by 김다예 on 2023/04/16. -// - -import UIKit - -class WelcomeView: UIView { - - private let mainImgView = UIImageView().then { - $0.image = UIImage(named: "tiving_logo") - } - - let welcomeLabel = UILabel().then { - $0.text = "님\n반가워요!" - $0.textColor = .white - $0.textAlignment = .center - $0.numberOfLines = 3 - $0.font = .tvingSemiBold(ofSize: 23) - } - - lazy var goToMainBtn = UIButton().then { - $0.setTitle("메인으로", for: .normal) - $0.titleLabel?.font = .tvingMedium(ofSize: 14) - $0.titleLabel?.textAlignment = .center - $0.backgroundColor = .tvingRed - $0.layer.cornerRadius = 3 - } - - override init(frame: CGRect) { - super.init(frame: frame) - - style() - hierarchy() - setLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - -} - -private extension WelcomeView { - func style() { - self.backgroundColor = .black - } - - func hierarchy() { - self.addSubviews(mainImgView, - welcomeLabel, - goToMainBtn) - } - - func setLayout() { - mainImgView.snp.makeConstraints { - $0.height.equalTo(mainImgView.snp.width).multipliedBy(0.56) - $0.top.equalTo(self.safeAreaLayoutGuide).inset(14) - $0.leading.trailing.equalToSuperview() - } - welcomeLabel.snp.makeConstraints { - $0.height.equalTo(75) - $0.top.equalTo(mainImgView.snp.bottom).offset(60) - $0.leading.trailing.equalToSuperview().inset(10) - } - goToMainBtn.snp.makeConstraints { - $0.height.equalTo(52) - $0.leading.trailing.equalToSuperview().inset(20) - $0.bottom.equalToSuperview().inset(66) - } - } -} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/LoginViewController.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Login/LoginViewController.swift similarity index 92% rename from GO_SOPT_Seminar_Assignment/Local/TVING/LoginViewController.swift rename to GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Login/LoginViewController.swift index 531e737..f0205b1 100644 --- a/GO_SOPT_Seminar_Assignment/Local/TVING/LoginViewController.swift +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Login/LoginViewController.swift @@ -10,20 +10,14 @@ import UIKit import SnapKit import Then -struct TvingUserInfo { - var id: String? - var password: String? - var nickName: String? -} - final class LoginViewController: BaseViewController { // MARK: - Property private let mainView = LoginView() - private let nickNameBottomSheet = AddNickNameBottomSheetView() + private let nickNameBottomSheet = NickNameBottomSheetView() - var user = TvingUserInfo() + let originUser = TvingUser() private var bottomSheetKeyboardEnable: Bool = false @@ -84,9 +78,9 @@ private extension LoginViewController { @objc func tappedLogInBtn() { saveUserEmail() - let welcomViewController = WelcomeViewController() - welcomViewController.idDataBind(idOrNick: getNickNameOrId()) - self.navigationController?.pushViewController(welcomViewController, animated: true) + let mainViewController = MainViewController() + mainViewController.userDataBind(orignalUser: originUser) + self.navigationController?.pushViewController(mainViewController, animated: true) } @objc @@ -123,22 +117,22 @@ private extension LoginViewController { func saveUserEmail(){ guard let id = mainView.idTextField.text else { return } - user.id = id + originUser.id = id } func saveUserNickName() { guard let nickName = nickNameBottomSheet.nickNameTextField.text else { return } - user.nickName = nickName + originUser.nickName = nickName } - func getNickNameOrId() -> String { - if let nickName = user.nickName { - return nickName - } else { - guard let id = user.id else { return "" } - return id - } - } +// func getNickNameOrId() -> String { +// if let nickName = user.nickName { +// return nickName +// } else { +// guard let id = user.id else { return "" } +// return id +// } +// } func isIDValid() -> Bool { guard let id = mainView.idTextField.text else { return false } @@ -171,7 +165,6 @@ private extension LoginViewController { mainView.idTextField.text = nil mainView.passwordTextField.text = nil nickNameBottomSheet.nickNameTextField.text = nil - user = TvingUserInfo() mainView.logInBtn.enableDisableButtonSet(isEnable: false, setColor: .black, setTextColor: .tvingGray2) } diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainBaseViewController.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainBaseViewController.swift new file mode 100644 index 0000000..bceaf7e --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainBaseViewController.swift @@ -0,0 +1,22 @@ +// +// MainBaseViewController.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/04. +// + +import UIKit + +class MainBaseViewController: BaseViewController { + + weak var scrollDelegate: UIScrollViewDelegate? + +} + +extension MainBaseViewController: UIScrollViewDelegate { + + func scrollViewDidScroll(_ scrollView: UIScrollView) { + guard let scrollViewDidScroll = scrollDelegate?.scrollViewDidScroll else { return } + scrollViewDidScroll(scrollView) + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainHomeViewController.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainHomeViewController.swift new file mode 100644 index 0000000..10d38b1 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainHomeViewController.swift @@ -0,0 +1,119 @@ +// +// MainHomeViewController.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/03. +// + +import UIKit + +import SnapKit +import Then + +protocol dataBindProtocol: AnyObject { + func dataBind(page: Int) +} + +class MainHomeViewController: MainBaseViewController { + + // MARK: - Property + + private let mainView = MainView() + + private let dummy = Contents.dummy() + private var mainPagingIndex: Int = 0 + + weak var delegate: dataBindProtocol? + + private func createLayout() -> UICollectionViewLayout { + + let config = UICollectionViewCompositionalLayoutConfiguration() + config.interSectionSpacing = 30 + + let layout = UICollectionViewCompositionalLayout(sectionProvider: { (sectionIndex: Int, layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in + + guard let sectionLayout = ContentsSectionLayout(rawValue: Contents.sectionLayout()[sectionIndex]) else {return nil} + + let itemSize = sectionLayout.itemSize + let item = NSCollectionLayoutItem(layoutSize: itemSize) + let group = NSCollectionLayoutGroup.horizontal(layoutSize: itemSize, subitems: [item]) + let section = NSCollectionLayoutSection(group: group) + + section.orthogonalScrollingBehavior = sectionLayout.orthogonalScrollinBehavior + section.interGroupSpacing = sectionLayout.interGroupSpacing + section.boundarySupplementaryItems = sectionLayout.header + section.boundarySupplementaryItems += sectionLayout.footer + + if sectionLayout.rawValue == "Header" { + section.visibleItemsInvalidationHandler = { visibleItems, scrollOffset, layoutEnvironment in + self.mainPagingIndex = Int(scrollOffset.x / (self.view.frame.width * sectionLayout.itemSize.widthDimension.dimension)) + } + } + return section + }, configuration: config) + + return layout + } + + // MARK: - Target + + private func target() { + mainView.collectionView.delegate = self + mainView.collectionView.dataSource = self + mainView.collectionView.collectionViewLayout = createLayout() + } + + // MARK: - Lift Cycle + + override func loadView() { + self.view = mainView + } + + override func viewDidLoad() { + super.viewDidLoad() + + target() + } +} + +extension MainHomeViewController: UICollectionViewDataSource { + + // section 개수 + func numberOfSections(in collectionView: UICollectionView) -> Int { + return dummy.count + } + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return dummy[section].count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MainViewContentsCell.identifier, for: indexPath) as? MainViewContentsCell else { return UICollectionViewCell()} + cell.configureCell(dummy[indexPath.section][indexPath.row]) + return cell + } + + func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { + if kind == UICollectionView.elementKindSectionHeader{ // 헤더일때 + guard let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: MainViewSectionHeader.identifier, for: indexPath) as? MainViewSectionHeader else {return UICollectionReusableView()} + header.mainLabel.text = Contents.sectionName()[indexPath.section] + return header + } else { + guard let footer = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: MainViewPagingIndicator.identifier, for: indexPath) as? MainViewPagingIndicator else {return UICollectionReusableView()} + footer.numberOfPages = dummy[indexPath.section].count + self.delegate = footer + return footer + } + } +} + +extension MainHomeViewController: UICollectionViewDelegate { + + func collectionView(_ collectionView: UICollectionView, didEndDisplaying: UICollectionViewCell, forItemAt: IndexPath) { + // 첫 번째 섹션일 때만 cell Index값 전달 + if forItemAt.section == 0 { + delegate?.dataBind(page: mainPagingIndex) + } + } +} + diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainKidsViewController.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainKidsViewController.swift new file mode 100644 index 0000000..305e89a --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainKidsViewController.swift @@ -0,0 +1,36 @@ +// +// MainKidsViewController.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/03. +// + +import UIKit + +class MainKidsViewController: MainBaseViewController { + + private let mainView = UIImageView() + + override func setStyle() { + super.setStyle() + + mainView.do { + $0.image = .kidsView + } + } + + override func sethirarchy() { + super.sethirarchy() + + view.addSubview(mainView) + } + + override func setLayout() { + super.setLayout() + + mainView.snp.makeConstraints { + $0.top.equalToSuperview().inset(120) + $0.bottom.leading.trailing.equalToSuperview() + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainLiveViewController.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainLiveViewController.swift new file mode 100644 index 0000000..585acad --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainLiveViewController.swift @@ -0,0 +1,36 @@ +// +// MainLiveViewController.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/03. +// + +import UIKit + +class MainLiveViewController: MainBaseViewController { + + private let mainView = UIImageView() + + override func setStyle() { + super.setStyle() + + mainView.do { + $0.image = .liveView + } + } + + override func sethirarchy() { + super.sethirarchy() + + view.addSubview(mainView) + } + + override func setLayout() { + super.setLayout() + + mainView.snp.makeConstraints { + $0.top.equalToSuperview().inset(120) + $0.bottom.leading.trailing.equalToSuperview() + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainMovieViewController.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainMovieViewController.swift new file mode 100644 index 0000000..95a9d54 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainMovieViewController.swift @@ -0,0 +1,36 @@ +// +// MainMovieViewController.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/03. +// + +import UIKit + +class MainMovieViewController: MainBaseViewController { + + private let mainView = UIImageView() + + override func setStyle() { + super.setStyle() + + mainView.do { + $0.image = .movieView + } + } + + override func sethirarchy() { + super.sethirarchy() + + view.addSubview(mainView) + } + + override func setLayout() { + super.setLayout() + + mainView.snp.makeConstraints { + $0.top.equalToSuperview().inset(120) + $0.bottom.leading.trailing.equalToSuperview() + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainParamountViewController.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainParamountViewController.swift new file mode 100644 index 0000000..d2edc87 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainParamountViewController.swift @@ -0,0 +1,36 @@ +// +// MainParamountViewController.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/03. +// + +import UIKit + +class MainParamountViewController: MainBaseViewController { + + private let mainView = UIImageView() + + override func setStyle() { + super.setStyle() + + mainView.do { + $0.image = .paramountView + } + } + + override func sethirarchy() { + super.sethirarchy() + + view.addSubview(mainView) + } + + override func setLayout() { + super.setLayout() + + mainView.snp.makeConstraints { + $0.top.equalToSuperview().inset(120) + $0.bottom.leading.trailing.equalToSuperview() + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainTVViewController.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainTVViewController.swift new file mode 100644 index 0000000..e179493 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainTVViewController.swift @@ -0,0 +1,36 @@ +// +// MainTVViewController.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/05/03. +// + +import UIKit + +class MainTVViewController: MainBaseViewController { + + private let mainView = UIImageView() + + override func setStyle() { + super.setStyle() + + mainView.do { + $0.image = .tvView + } + } + + override func sethirarchy() { + super.sethirarchy() + + view.addSubview(mainView) + } + + override func setLayout() { + super.setLayout() + + mainView.snp.makeConstraints { + $0.top.equalToSuperview().inset(120) + $0.bottom.leading.trailing.equalToSuperview() + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainViewController.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainViewController.swift new file mode 100644 index 0000000..bf46c5b --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/Main/MainViewController.swift @@ -0,0 +1,199 @@ +// +// MainViewController.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/25. +// + +import UIKit + +import SnapKit +import Then + +class MainViewController: BaseViewController { + + // MARK: - Property + + private let topMenuBar = MainViewTopMenu() + private let pageController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal) + private let bottomMenuBar = BottomMenu() + + lazy var homeVC = MainHomeViewController() + lazy var liveVC = MainLiveViewController() + lazy var tvVC = MainTVViewController() + lazy var movieVC = MainMovieViewController() + lazy var paramountVC = MainParamountViewController() + lazy var kidsVC = MainKidsViewController() + + lazy var pageVCDummy = [homeVC, liveVC, tvVC, movieVC, paramountVC, kidsVC] + + private var topSegmentIndicatorWidth: [CGFloat] = [] + var currentPageIndex: Int = 0 { + didSet{ + settingTopSegmentIndicator(index: currentPageIndex) + } + } + + var user: TvingUser? + + // MARK: - Target + + private func target() { + topMenuBar.topprofileBtn.addTarget(self, action: #selector(tappedGoToMyPageBtn), for: .touchUpInside) + topMenuBar.topSegmentLabelStackView.arrangedSubviews.forEach { + $0.isUserInteractionEnabled = true + $0.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(segmentTouched))) + } + + pageVCDummy.forEach { + $0.scrollDelegate = self + } + } + + // MARK: - Lift Cycle + + override func viewDidLoad() { + super.viewDidLoad() + + target() + getTopSegmentWidth() + } + + override func setStyle() { + super.setStyle() + + pageController.do { + $0.delegate = self + $0.dataSource = self + } + } + + override func sethirarchy() { + super.sethirarchy() + + view.addSubviews(pageController.view, topMenuBar, bottomMenuBar) + addChild(pageController) + pageController.didMove(toParent: self) + + if let firstVC = pageVCDummy.first { + pageController.setViewControllers([firstVC], direction: .forward, animated: true, completion: nil) + } + } + + override func setLayout() { + super.setLayout() + + topMenuBar.snp.makeConstraints { + $0.top.leading.trailing.equalToSuperview() + } + pageController.view.snp.makeConstraints { + $0.top.leading.trailing.equalToSuperview() + $0.bottom.equalTo(bottomMenuBar.snp.top) + } + bottomMenuBar.snp.makeConstraints{ + $0.height.equalTo(52) + $0.bottom.equalTo(view.safeAreaLayoutGuide) + $0.leading.trailing.equalToSuperview() + } + } +} + +extension MainViewController { + + // MARK: - objc func + + @objc + func tappedGoToMyPageBtn() { + let myPageViewController = MyPageViewController() + myPageViewController.userDataBind(orignalUser: user) + self.navigationController?.pushViewController(myPageViewController, animated: true) + } + + @objc + func segmentTouched(sender: UITapGestureRecognizer) { + guard let labelView = sender.view, + let index = topMenuBar.topSegmentLabelStackView.arrangedSubviews.firstIndex(of: labelView) else { return } + pageController.setViewControllers([pageVCDummy[index]], direction: .forward, animated: true, completion: nil) + currentPageIndex = index + } + + // MARK: - Custom func + + func userDataBind(orignalUser: TvingUser) { + user = orignalUser + } + + func getTopSegmentWidth() { + topMenuBar.topSegmentLabelStackView.arrangedSubviews.forEach{ + topSegmentIndicatorWidth.append($0.intrinsicContentSize.width) + } + } + + func settingTopSegmentIndicator(index: Int) { + topMenuBar.topSegmentIndicator.width = topSegmentIndicatorWidth[index] + topMenuBar.topSegmentIndicator.leftInset = topSegmentIndicatorWidth[0.. 0 { + if scroll < 40 { + updateTopMenu(inset: -scroll, topHidden: false) + } else { + updateTopMenu(inset: -40, topHidden: true) + } + } else { + updateTopMenu(inset: 0, topHidden: false) + } + } + + func updateTopMenuBarColor(scroll: CGFloat) { + let scrolledDistance = ContentsSectionLayout.header.itemSize.heightDimension.dimension + if scroll > 20 { + topMenuBar.backgroundColor = .black.withAlphaComponent(scroll / scrolledDistance) + if scroll > scrolledDistance { + topMenuBar.backgroundColor = .black + } + } else { + topMenuBar.backgroundColor = .clear + } + } +} + +extension MainViewController: UIPageViewControllerDelegate { } +extension MainViewController: UIPageViewControllerDataSource { + + func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { + guard let index = pageVCDummy.firstIndex(of: viewController as! MainBaseViewController) else { return nil } + let previousIndex = index - 1 + if previousIndex < 0 { return nil } + return pageVCDummy[previousIndex] + } + + func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { + guard let index = pageVCDummy.firstIndex(of: viewController as! MainBaseViewController) else { return nil } + let nextIndex = index + 1 + if nextIndex > pageVCDummy.count - 1 { return nil } + return pageVCDummy[nextIndex] + } + + func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { + guard let currentVC = pageViewController.viewControllers?.first, + let currentIndex = pageVCDummy.firstIndex(of: currentVC as! MainBaseViewController) else { return } + currentPageIndex = currentIndex + } +} + +extension MainViewController: UIScrollViewDelegate { + + func scrollViewDidScroll(_ scrollView: UIScrollView) { + updateTopMenuBarConstraints(scroll: scrollView.contentOffset.y) + updateTopMenuBarColor(scroll: scrollView.contentOffset.y) + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/MyPage/MyPageViewController.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/MyPage/MyPageViewController.swift new file mode 100644 index 0000000..c781493 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Local/TVING/ViewController/MyPage/MyPageViewController.swift @@ -0,0 +1,126 @@ +// +// MyPageViewController.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/25. +// + +import UIKit + +import SnapKit +import Then + +class MyPageViewController: BaseViewController { + + // MARK: - Property + + private let mainView = MyPageView() + private let bottomMenuBar = BottomMenu() + + var user: TvingUser? + + private let dummy = MyPageMenu.dummy() + + // MARK: - Target + + func target() { + mainView.headerView.profileName.text = user?.getNickNameOrId() + mainView.topBackBtn.addTarget(self, action: #selector(tappedBackBtn), for: .touchUpInside) + + mainView.myPageTableView.delegate = self + mainView.myPageTableView.dataSource = self + } + + // MARK: - Lift Cycle + + override func loadView() { + self.view = mainView + } + + override func viewDidLoad() { + super.viewDidLoad() + + target() + } + + override func sethirarchy() { + super.sethirarchy() + + view.addSubviews(bottomMenuBar) + } + + override func setLayout() { + super.setLayout() + + bottomMenuBar.snp.makeConstraints{ + $0.height.equalTo(52) + $0.bottom.equalTo(view.safeAreaLayoutGuide) + $0.leading.trailing.equalToSuperview() + } + } +} + +extension MyPageViewController { + + // MARK: - objc func + + @objc func tappedBackBtn() { + self.navigationController?.popViewController(animated: true) + } + + // MARK: - Custom func + + func userDataBind(orignalUser: TvingUser?) { + user = orignalUser + } +} + +extension MyPageViewController: UITableViewDataSource { + + func numberOfSections(in tableView: UITableView) -> Int { + return dummy.count + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return dummy[section].count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let cell = tableView.dequeueReusableCell(withIdentifier: LabelNextBtnTableViewCell.identifier, for: indexPath) as? LabelNextBtnTableViewCell else { return UITableViewCell() } + cell.configCell(dummy[indexPath.section][indexPath.row]) + return cell + } + +} + +extension MyPageViewController: UITableViewDelegate { + + func tableView(_ tableView: UITableView, viewForHeaderInSection: Int) -> UIView? { + let sectionHeader = UIView() + return sectionHeader + } + + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + return 10 + } + + func tableView(_ tableView: UITableView, viewForFooterInSection: Int) -> UIView? { + let sectionFooter = UIView() + + let sectionSeparator = UIView() + if viewForFooterInSection != dummy.count - 1 { + sectionFooter.addSubview(sectionSeparator) + sectionSeparator.backgroundColor = .tvingGray4 + sectionSeparator.snp.makeConstraints { + $0.height.equalTo(0.5) + $0.bottom.equalToSuperview() + $0.leading.trailing.equalToSuperview() + } + } + return sectionFooter + } + + func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { + return 10 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Local/TVING/WelcomeViewController.swift b/GO_SOPT_Seminar_Assignment/Local/TVING/WelcomeViewController.swift deleted file mode 100644 index 3624805..0000000 --- a/GO_SOPT_Seminar_Assignment/Local/TVING/WelcomeViewController.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// WelcomeViewController.swift -// GO_SOPT_Seminar_Assingment -// -// Created by 김다예 on 2023/04/12. -// - -import UIKit - -final class WelcomeViewController: BaseViewController { - - // MARK: - Property - - private let mainView = WelcomeView() - - // MARK: - Target - - private func target() { - mainView.goToMainBtn.addTarget(self, action: #selector(tappedGoToMainBtn), for: .touchUpInside) - } - - // MARK: - Lift Cycle - - override func loadView() { - self.view = mainView - } - - override func viewDidLoad() { - super.viewDidLoad() - - target() - } -} - -extension WelcomeViewController { - - func idDataBind(idOrNick: String) { - mainView.welcomeLabel.text = "\(idOrNick)님\n반가워요!" - } - - @objc - func tappedGoToMainBtn() { - self.navigationController?.popToRootViewController(animated: true) - } -} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Faded.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Faded.imageset/Contents.json new file mode 100644 index 0000000..19f1df7 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Faded.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Faded.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Rectangle 5960 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Rectangle 5960 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Faded.imageset/Faded.png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Faded.imageset/Faded.png new file mode 100644 index 0000000..90bc303 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Faded.imageset/Faded.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Faded.imageset/Rectangle 5960 (1).png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Faded.imageset/Rectangle 5960 (1).png new file mode 100644 index 0000000..8b52679 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Faded.imageset/Rectangle 5960 (1).png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Faded.imageset/Rectangle 5960 (2).png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Faded.imageset/Rectangle 5960 (2).png new file mode 100644 index 0000000..df50b2c Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/Faded.imageset/Rectangle 5960 (2).png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/KidsView.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/KidsView.imageset/Contents.json new file mode 100644 index 0000000..9b3f844 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/KidsView.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "KidsView.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/KidsView.imageset/KidsView.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/KidsView.imageset/KidsView.jpg new file mode 100644 index 0000000..44cc6dd Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/KidsView.imageset/KidsView.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/LiveView.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/LiveView.imageset/Contents.json new file mode 100644 index 0000000..b64f1cf --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/LiveView.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "LiveView.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/LiveView.imageset/LiveView.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/LiveView.imageset/LiveView.jpg new file mode 100644 index 0000000..5077b99 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/LiveView.imageset/LiveView.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner1.imageset/Banner1.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner1.imageset/Banner1.jpg new file mode 100644 index 0000000..7b2a840 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner1.imageset/Banner1.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner1.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner1.imageset/Contents.json new file mode 100644 index 0000000..7551bc6 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner1.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Banner1.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner2.imageset/Banner2.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner2.imageset/Banner2.jpg new file mode 100644 index 0000000..3c28897 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner2.imageset/Banner2.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner2.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner2.imageset/Contents.json new file mode 100644 index 0000000..025ee59 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Banner2.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner3.imageset/Banner3.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner3.imageset/Banner3.jpg new file mode 100644 index 0000000..9c98fb0 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner3.imageset/Banner3.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner3.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner3.imageset/Contents.json new file mode 100644 index 0000000..efa8991 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Banner3.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Banner3.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/HarryPotterPoster.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/HarryPotterPoster.imageset/Contents.json new file mode 100644 index 0000000..38ca3ba --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/HarryPotterPoster.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "HarryPotterPoster.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "image 21 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "image 21 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/HarryPotterPoster.imageset/HarryPotterPoster.png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/HarryPotterPoster.imageset/HarryPotterPoster.png new file mode 100644 index 0000000..a489e1c Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/HarryPotterPoster.imageset/HarryPotterPoster.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/HarryPotterPoster.imageset/image 21 (1).png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/HarryPotterPoster.imageset/image 21 (1).png new file mode 100644 index 0000000..339f679 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/HarryPotterPoster.imageset/image 21 (1).png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/HarryPotterPoster.imageset/image 21 (2).png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/HarryPotterPoster.imageset/image 21 (2).png new file mode 100644 index 0000000..fbd23c5 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/HarryPotterPoster.imageset/image 21 (2).png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live1.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live1.imageset/Contents.json new file mode 100644 index 0000000..703f6ca --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live1.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Live1.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live1.imageset/Live1.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live1.imageset/Live1.jpg new file mode 100644 index 0000000..5102652 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live1.imageset/Live1.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live2.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live2.imageset/Contents.json new file mode 100644 index 0000000..7a4ab36 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Live2.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live2.imageset/Live2.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live2.imageset/Live2.jpg new file mode 100644 index 0000000..d459c41 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live2.imageset/Live2.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live3.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live3.imageset/Contents.json new file mode 100644 index 0000000..051fc87 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live3.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Live3.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live3.imageset/Live3.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live3.imageset/Live3.jpg new file mode 100644 index 0000000..9bb8a93 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Live3.imageset/Live3.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/LordOfTheRingPoster.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/LordOfTheRingPoster.imageset/Contents.json new file mode 100644 index 0000000..6b9e4a5 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/LordOfTheRingPoster.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "LordOfTheRingPoster.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "image 22 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "image 22 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/LordOfTheRingPoster.imageset/LordOfTheRingPoster.png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/LordOfTheRingPoster.imageset/LordOfTheRingPoster.png new file mode 100644 index 0000000..2c6c5fd Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/LordOfTheRingPoster.imageset/LordOfTheRingPoster.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/LordOfTheRingPoster.imageset/image 22 (1).png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/LordOfTheRingPoster.imageset/image 22 (1).png new file mode 100644 index 0000000..fc08273 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/LordOfTheRingPoster.imageset/image 22 (1).png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/LordOfTheRingPoster.imageset/image 22 (2).png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/LordOfTheRingPoster.imageset/image 22 (2).png new file mode 100644 index 0000000..a28abb0 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/LordOfTheRingPoster.imageset/image 22 (2).png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/MT.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/MT.imageset/Contents.json new file mode 100644 index 0000000..4b6de63 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/MT.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "MT.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/MT.imageset/MT.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/MT.imageset/MT.jpg new file mode 100644 index 0000000..c8b45ef Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/MT.imageset/MT.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main1.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main1.imageset/Contents.json new file mode 100644 index 0000000..01af3d2 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main1.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Main1.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main1.imageset/Main1.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main1.imageset/Main1.jpg new file mode 100644 index 0000000..a629e00 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main1.imageset/Main1.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main2.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main2.imageset/Contents.json new file mode 100644 index 0000000..9eca0d0 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Main2.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main2.imageset/Main2.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main2.imageset/Main2.jpg new file mode 100644 index 0000000..8d75848 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main2.imageset/Main2.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main3.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main3.imageset/Contents.json new file mode 100644 index 0000000..10e134d --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main3.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Main3.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main3.imageset/Main3.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main3.imageset/Main3.jpg new file mode 100644 index 0000000..523c0c2 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main3.imageset/Main3.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main4.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main4.imageset/Contents.json new file mode 100644 index 0000000..e8dba5e --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main4.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Main4.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main4.imageset/Main4.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main4.imageset/Main4.jpg new file mode 100644 index 0000000..816f225 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/Main4.imageset/Main4.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/SuzumePoster.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/SuzumePoster.imageset/Contents.json new file mode 100644 index 0000000..ec7daff --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/SuzumePoster.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "SuzumePoster.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "image 23 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "image 23 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/SuzumePoster.imageset/SuzumePoster.png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/SuzumePoster.imageset/SuzumePoster.png new file mode 100644 index 0000000..e4122e1 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/SuzumePoster.imageset/SuzumePoster.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/SuzumePoster.imageset/image 23 (1).png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/SuzumePoster.imageset/image 23 (1).png new file mode 100644 index 0000000..5207b1d Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/SuzumePoster.imageset/image 23 (1).png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/SuzumePoster.imageset/image 23 (2).png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/SuzumePoster.imageset/image 23 (2).png new file mode 100644 index 0000000..e8bb971 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/SuzumePoster.imageset/image 23 (2).png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/YourNamePoster.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/YourNamePoster.imageset/Contents.json new file mode 100644 index 0000000..54e2b05 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/YourNamePoster.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "YourNamePoster.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "제목_없는_아트워크.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "제목_없는_아트워크 5.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/YourNamePoster.imageset/YourNamePoster.png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/YourNamePoster.imageset/YourNamePoster.png new file mode 100644 index 0000000..78a3978 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/YourNamePoster.imageset/YourNamePoster.png differ diff --git "a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/YourNamePoster.imageset/\354\240\234\353\252\251_\354\227\206\353\212\224_\354\225\204\355\212\270\354\233\214\355\201\254 5.png" "b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/YourNamePoster.imageset/\354\240\234\353\252\251_\354\227\206\353\212\224_\354\225\204\355\212\270\354\233\214\355\201\254 5.png" new file mode 100644 index 0000000..b3c9ed8 Binary files /dev/null and "b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/YourNamePoster.imageset/\354\240\234\353\252\251_\354\227\206\353\212\224_\354\225\204\355\212\270\354\233\214\355\201\254 5.png" differ diff --git "a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/YourNamePoster.imageset/\354\240\234\353\252\251_\354\227\206\353\212\224_\354\225\204\355\212\270\354\233\214\355\201\254.png" "b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/YourNamePoster.imageset/\354\240\234\353\252\251_\354\227\206\353\212\224_\354\225\204\355\212\270\354\233\214\355\201\254.png" new file mode 100644 index 0000000..da90762 Binary files /dev/null and "b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/YourNamePoster.imageset/\354\240\234\353\252\251_\354\227\206\353\212\224_\354\225\204\355\212\270\354\233\214\355\201\254.png" differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount1.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount1.imageset/Contents.json new file mode 100644 index 0000000..4c0c851 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount1.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "paramount1.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount1.imageset/paramount1.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount1.imageset/paramount1.jpg new file mode 100644 index 0000000..f1299ca Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount1.imageset/paramount1.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount2.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount2.imageset/Contents.json new file mode 100644 index 0000000..9e9363b --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "paramount2.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount2.imageset/paramount2.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount2.imageset/paramount2.jpg new file mode 100644 index 0000000..d634bb2 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount2.imageset/paramount2.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount3.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount3.imageset/Contents.json new file mode 100644 index 0000000..f8b762b --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount3.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "paramount3.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount3.imageset/paramount3.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount3.imageset/paramount3.jpg new file mode 100644 index 0000000..d380b17 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount3.imageset/paramount3.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount4.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount4.imageset/Contents.json new file mode 100644 index 0000000..04eac52 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount4.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "paramount4.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount4.imageset/paramount4.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount4.imageset/paramount4.jpg new file mode 100644 index 0000000..5830e4f Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount4.imageset/paramount4.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount5.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount5.imageset/Contents.json new file mode 100644 index 0000000..c28257e --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount5.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "paramount5.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount5.imageset/paramount5.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount5.imageset/paramount5.jpg new file mode 100644 index 0000000..1dbbb49 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/paramount5.imageset/paramount5.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/signalPoster.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/signalPoster.imageset/Contents.json new file mode 100644 index 0000000..40814d5 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/signalPoster.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "signalPoster.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "image 20 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "image 20 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/signalPoster.imageset/image 20 (1).png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/signalPoster.imageset/image 20 (1).png new file mode 100644 index 0000000..2784e9d Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/signalPoster.imageset/image 20 (1).png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/signalPoster.imageset/image 20 (2).png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/signalPoster.imageset/image 20 (2).png new file mode 100644 index 0000000..89c8b08 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/signalPoster.imageset/image 20 (2).png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/signalPoster.imageset/signalPoster.png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/signalPoster.imageset/signalPoster.png new file mode 100644 index 0000000..20bff10 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MainView/signalPoster.imageset/signalPoster.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MovieView.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MovieView.imageset/Contents.json new file mode 100644 index 0000000..42232d6 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MovieView.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "MovieView.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MovieView.imageset/MovieView.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MovieView.imageset/MovieView.jpg new file mode 100644 index 0000000..cd9b251 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/MovieView.imageset/MovieView.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/ParamountView.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/ParamountView.imageset/Contents.json new file mode 100644 index 0000000..c1e378d --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/ParamountView.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "ParamountView.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/ParamountView.imageset/ParamountView.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/ParamountView.imageset/ParamountView.jpg new file mode 100644 index 0000000..20e7c78 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/ParamountView.imageset/ParamountView.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TVView.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TVView.imageset/Contents.json new file mode 100644 index 0000000..067b2e4 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TVView.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "TVView.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TVView.imageset/TVView.jpg b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TVView.imageset/TVView.jpg new file mode 100644 index 0000000..ed6b765 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TVView.imageset/TVView.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TvingWhiteLogo.imageset/Contents.json b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TvingWhiteLogo.imageset/Contents.json new file mode 100644 index 0000000..8251009 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TvingWhiteLogo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "TvingWhiteLogo.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Mask group (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Mask group (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TvingWhiteLogo.imageset/Mask group (1).png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TvingWhiteLogo.imageset/Mask group (1).png new file mode 100644 index 0000000..8c16aa0 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TvingWhiteLogo.imageset/Mask group (1).png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TvingWhiteLogo.imageset/Mask group (2).png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TvingWhiteLogo.imageset/Mask group (2).png new file mode 100644 index 0000000..6f4570c Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TvingWhiteLogo.imageset/Mask group (2).png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TvingWhiteLogo.imageset/TvingWhiteLogo.png b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TvingWhiteLogo.imageset/TvingWhiteLogo.png new file mode 100644 index 0000000..20dd8dc Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Assets.xcassets/TVING/TvingWhiteLogo.imageset/TvingWhiteLogo.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/homeGray.jpg b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/homeGray.jpg new file mode 100644 index 0000000..0852242 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/homeGray.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/homeWhite.jpg b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/homeWhite.jpg new file mode 100644 index 0000000..4dc8904 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/homeWhite.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/preGray.jpg b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/preGray.jpg new file mode 100644 index 0000000..69a7d23 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/preGray.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/preWhite.jpg b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/preWhite.jpg new file mode 100644 index 0000000..02e3464 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/preWhite.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/recordGray.jpg b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/recordGray.jpg new file mode 100644 index 0000000..3846095 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/recordGray.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/recordWhite.jpg b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/recordWhite.jpg new file mode 100644 index 0000000..9c11b90 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/recordWhite.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/searchGray.jpg b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/searchGray.jpg new file mode 100644 index 0000000..c5c493e Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/searchGray.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/searchWhite.jpg b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/searchWhite.jpg new file mode 100644 index 0000000..c5fb88e Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/bottomBtnImg/searchWhite.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/doosan.png b/GO_SOPT_Seminar_Assignment/Resources/Image/doosan.png new file mode 100644 index 0000000..c931cca Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/doosan.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/nextBtn.png b/GO_SOPT_Seminar_Assignment/Resources/Image/nextBtn.png new file mode 100644 index 0000000..1fc35aa Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/nextBtn.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/notification.png b/GO_SOPT_Seminar_Assignment/Resources/Image/notification.png new file mode 100644 index 0000000..b3de961 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/notification.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/pairing.png b/GO_SOPT_Seminar_Assignment/Resources/Image/pairing.png new file mode 100644 index 0000000..2e966f7 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/pairing.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/settings.png b/GO_SOPT_Seminar_Assignment/Resources/Image/settings.png new file mode 100644 index 0000000..0959afd Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/settings.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/tvingCash.png b/GO_SOPT_Seminar_Assignment/Resources/Image/tvingCash.png new file mode 100644 index 0000000..3372ae3 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/tvingCash.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/tvingImg.jpg b/GO_SOPT_Seminar_Assignment/Resources/Image/tvingImg.jpg new file mode 100644 index 0000000..f5d2eda Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/tvingImg.jpg differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/tvingSubscribe.png b/GO_SOPT_Seminar_Assignment/Resources/Image/tvingSubscribe.png new file mode 100644 index 0000000..dc90210 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/tvingSubscribe.png differ diff --git a/GO_SOPT_Seminar_Assignment/Resources/Image/tvnJtbc.png b/GO_SOPT_Seminar_Assignment/Resources/Image/tvnJtbc.png new file mode 100644 index 0000000..88f39c5 Binary files /dev/null and b/GO_SOPT_Seminar_Assignment/Resources/Image/tvnJtbc.png differ diff --git a/GO_SOPT_Seminar_Assignment/SceneDelegate.swift b/GO_SOPT_Seminar_Assignment/SceneDelegate.swift index 3852493..dc56cec 100644 --- a/GO_SOPT_Seminar_Assignment/SceneDelegate.swift +++ b/GO_SOPT_Seminar_Assignment/SceneDelegate.swift @@ -13,7 +13,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } - let navigationController = UINavigationController(rootViewController: LoginViewController()) + let navigationController = UINavigationController(rootViewController: MainViewController()) self.window = UIWindow(windowScene: windowScene) self.window?.rootViewController = navigationController self.window?.makeKeyAndVisible() diff --git a/GO_SOPT_Seminar_Assignment/Sources/Base/BaseView.swift b/GO_SOPT_Seminar_Assignment/Sources/Base/BaseView.swift index af75d4d..306658d 100644 --- a/GO_SOPT_Seminar_Assignment/Sources/Base/BaseView.swift +++ b/GO_SOPT_Seminar_Assignment/Sources/Base/BaseView.swift @@ -13,6 +13,7 @@ class BaseView: UIView { super.init(frame: frame) setStyle() + setHierarchy() setLayout() } @@ -21,6 +22,9 @@ class BaseView: UIView { fatalError("init(coder:) has not been implemented") } - func setStyle() {} + func setStyle() { + self.backgroundColor = .black + } + func setHierarchy() {} func setLayout() {} } diff --git a/GO_SOPT_Seminar_Assignment/Sources/Base/BaseViewController.swift b/GO_SOPT_Seminar_Assignment/Sources/Base/BaseViewController.swift index 7c80003..622275a 100644 --- a/GO_SOPT_Seminar_Assignment/Sources/Base/BaseViewController.swift +++ b/GO_SOPT_Seminar_Assignment/Sources/Base/BaseViewController.swift @@ -34,6 +34,7 @@ class BaseViewController: UIViewController { super.viewDidLoad() setStyle() + sethirarchy() setLayout() } @@ -52,11 +53,12 @@ class BaseViewController: UIViewController { /// Attributes (속성) 설정 메서드 func setStyle() { - view.backgroundColor = .black } + /// Hierarchy (계층) 설정 메서드 + func sethirarchy() {} - /// Hierarchy, Constraints (계층 및 제약조건) 설정 메서드 + /// Constraints (제약조건) 설정 메서드 func setLayout() {} diff --git a/GO_SOPT_Seminar_Assignment/Sources/Classes & Struct & Enum/LabelNextBtnTableViewCell.swift b/GO_SOPT_Seminar_Assignment/Sources/Classes & Struct & Enum/LabelNextBtnTableViewCell.swift new file mode 100644 index 0000000..34a44ab --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Sources/Classes & Struct & Enum/LabelNextBtnTableViewCell.swift @@ -0,0 +1,80 @@ +// +// LabelNextBtnTableViewCell.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/26. +// + +import UIKit + +import SnapKit +import Then + +class LabelNextBtnTableViewCell: UITableViewCell { + + // MARK: - Property + + static let identifier = "1LabelNxtBtnViewCell" + + private let label = UILabel() + private let nextBtn = UIButton() + + // MARK: - Init + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + + setStyle() + setHierarchy() + setLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Property + + func configCell(_ mypageMenu: MyPageMenu){ + label.text = mypageMenu.menuName + } + +} + +private extension LabelNextBtnTableViewCell { + + // MARK: - Style, Hierarchy, Layout + + func setStyle() { + + contentView.backgroundColor = .black + selectionStyle = .none + + label.do { + $0.font = .tvingMedium(ofSize: 15) + $0.textColor = .tvingGray2 + } + nextBtn.do { + $0.setImage(.nextImg.resized(withPercentage: 0.6), for: .normal) + $0.imageView?.contentMode = .scaleAspectFit + } + } + + func setHierarchy() { + contentView.addSubviews(label, + nextBtn) + } + + func setLayout() { + label.snp.makeConstraints { + $0.height.equalTo(60) + $0.centerY.equalToSuperview() + $0.leading.equalToSuperview().inset(10) + } + nextBtn.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.trailing.equalToSuperview().inset(10 + ) + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Sources/Extensions/CALayer+.swift b/GO_SOPT_Seminar_Assignment/Sources/Extensions/CALayer+.swift new file mode 100644 index 0000000..bd28367 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Sources/Extensions/CALayer+.swift @@ -0,0 +1,35 @@ +// +// CALayer+.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/27. +// + +import UIKit + +extension CALayer { + + func addBorder(_ arr_edge: [UIRectEdge], color: UIColor, width: CGFloat) { + for edge in arr_edge { + let border = CALayer() + switch edge { + case UIRectEdge.top: + border.frame = CGRect.init(x: 0, y: 0, width: frame.width, height: width) + break + case UIRectEdge.bottom: + border.frame = CGRect.init(x: 0, y: frame.height - width, width: frame.width, height: width) + break + case UIRectEdge.left: + border.frame = CGRect.init(x: 0, y: 0, width: width, height: frame.height) + break + case UIRectEdge.right: + border.frame = CGRect.init(x: frame.width - width, y: 0, width: width, height: frame.height) + break + default: + break + } + border.backgroundColor = color.cgColor; + self.addSublayer(border) + } + } +} diff --git a/GO_SOPT_Seminar_Assignment/Sources/Extensions/UIColor+.swift b/GO_SOPT_Seminar_Assignment/Sources/Extensions/UIColor+.swift index 87129a9..d145313 100644 --- a/GO_SOPT_Seminar_Assignment/Sources/Extensions/UIColor+.swift +++ b/GO_SOPT_Seminar_Assignment/Sources/Extensions/UIColor+.swift @@ -19,6 +19,9 @@ extension UIColor { static var tvingRed: UIColor { return UIColor(r: 234, g: 51, b: 58) } + static var tvingGray5: UIColor { + return UIColor(r: 25, g: 25, b: 25) + } static var tvingGray4: UIColor { return UIColor(r: 46, g: 46, b: 46) } diff --git a/GO_SOPT_Seminar_Assignment/Sources/Extensions/UIImage+.swift b/GO_SOPT_Seminar_Assignment/Sources/Extensions/UIImage+.swift new file mode 100644 index 0000000..633fe02 --- /dev/null +++ b/GO_SOPT_Seminar_Assignment/Sources/Extensions/UIImage+.swift @@ -0,0 +1,76 @@ +// +// UIImage+.swift +// GO_SOPT_Seminar_Assignment +// +// Created by 김다예 on 2023/04/25. +// + +import UIKit.UIImage + +extension UIImage { + + func resized(withPercentage percentage: CGFloat) -> UIImage? { + let canvasSize = CGSize(width: size.width * percentage, height: size.height * percentage) + UIGraphicsBeginImageContextWithOptions(canvasSize, false, scale) + defer { UIGraphicsEndImageContext() } + draw(in: CGRect(origin: .zero, size: canvasSize)) + return UIGraphicsGetImageFromCurrentImageContext() + } + static var tvingWhiteLogo: UIImage { UIImage(named: "TvingWhiteLogo.png")! } + + static var backImg: UIImage { UIImage(named: "btn_before.png")! } + static var nextImg: UIImage { UIImage(named: "nextBtn.png")! } + + static var pairingImg: UIImage { UIImage(named: "pairing.png")! } + static var notificationImg: UIImage { UIImage(named: "notification.png")! } + static var settingImg: UIImage { UIImage(named: "settings.png")! } + static var profileImg: UIImage { UIImage(named: "tvingImg.jpg")! } + static var utilizeImg: UIImage { UIImage(named: "tvingSubscribe.png")! } + static var cashImg: UIImage { UIImage(named: "tvingCash.png")! } + static var tvnJtbcImg: UIImage { UIImage(named: "tvnJtbc.png")! } + + static var bottomHomeG: UIImage { UIImage(named: "homeGray.jpg")! } + static var bottomHomeW: UIImage { UIImage(named: "homeWhite.jpg")! } + static var bottomPreG: UIImage { UIImage(named: "preGray.jpg")! } + static var bottomPreW: UIImage { UIImage(named: "preWhite.jpg")! } + static var bottomSearchG: UIImage { UIImage(named: "searchGray.jpg")! } + static var bottomSearchW: UIImage { UIImage(named: "searchWhite.jpg")! } + static var bottomRecordG: UIImage { UIImage(named: "recordGray.jpg")! } + static var bottomRecordW: UIImage { UIImage(named: "recordWhite.jpg")! } + + static var faded: UIImage { UIImage(named: "Faded.png")! } + + static var yourNamePoster: UIImage { UIImage(named: "YourNamePoster.png")! } + static var harryPotterPoster: UIImage { UIImage(named: "HarryPotterPoster.png")! } + static var loardOfTheKingPoster: UIImage { UIImage(named: "LordOfTheRingPoster.png")! } + static var signalPoster: UIImage { UIImage(named: "signalPoster.png")! } + static var suzumePoster: UIImage { UIImage(named: "SuzumePoster.png")! } + static var mtPoster: UIImage { UIImage(named: "MT.jpg")! } + + static var main1: UIImage { UIImage(named: "Main1.jpg")! } + static var main2: UIImage { UIImage(named: "Main2.jpg")! } + static var main3: UIImage { UIImage(named: "Main3.jpg")! } + static var main4: UIImage { UIImage(named: "Main4.jpg")! } + + static var banner1: UIImage { UIImage(named: "Banner1.jpg")! } + static var banner2: UIImage { UIImage(named: "Banner2.jpg")! } + static var banner3: UIImage { UIImage(named: "Banner3.jpg")! } + + static var live1: UIImage { UIImage(named: "Live1.jpg")! } + static var live2: UIImage { UIImage(named: "Live2.jpg")! } + static var live3: UIImage { UIImage(named: "Live3.jpg")! } + + static var paramount1: UIImage { UIImage(named: "paramount1.jpg")! } + static var paramount2: UIImage { UIImage(named: "paramount2.jpg")! } + static var paramount3: UIImage { UIImage(named: "paramount3.jpg")! } + static var paramount4: UIImage { UIImage(named: "paramount4.jpg")! } + static var paramount5: UIImage { UIImage(named: "paramount5.jpg")! } + + static var liveView: UIImage { UIImage(named: "LiveView.jpg")! } + static var tvView: UIImage { UIImage(named: "TVView.jpg")! } + static var movieView: UIImage { UIImage(named: "MovieView.jpg")! } + static var paramountView: UIImage { UIImage(named: "ParamountView.jpg")! } + static var kidsView: UIImage { UIImage(named: "KidsView.jpg")! } + + +} diff --git a/GO_SOPT_Seminar_Assignment/Sources/Extensions/UILabel+.swift b/GO_SOPT_Seminar_Assignment/Sources/Extensions/UILabel+.swift index 2e5c66f..7d65ceb 100644 --- a/GO_SOPT_Seminar_Assignment/Sources/Extensions/UILabel+.swift +++ b/GO_SOPT_Seminar_Assignment/Sources/Extensions/UILabel+.swift @@ -20,12 +20,36 @@ extension UILabel { func underLine(from text: String?, at range: String?) { - guard let text = text, - let range = range else { return } - - let attributedString = NSMutableAttributedString(string: text) - attributedString.addAttributes([NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue], range: NSString(string: text).range(of: range)) - self.attributedText = attributedString + guard let text = text, + let range = range else { return } + + let attributedString = NSMutableAttributedString(string: text) + attributedString.addAttributes([NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue], range: NSString(string: text).range(of: range)) + self.attributedText = attributedString + } + + func setLineSpacing(spacing: CGFloat) { + guard let text = text else { return } + + let attributeString = NSMutableAttributedString(string: text) + let style = NSMutableParagraphStyle() + style.lineSpacing = spacing + attributeString.addAttribute(.paragraphStyle, + value: style, + range: NSRange(location: 0, length: attributeString.length)) + attributedText = attributeString + } + + func labelWithImg(composition: NSAttributedString..., spacing: CGFloat) { + let attributedString = NSMutableAttributedString() + for i in composition { + attributedString.append(i) } - + let style = NSMutableParagraphStyle() + style.lineSpacing = spacing + attributedString.addAttribute(.paragraphStyle, + value: style, + range: NSRange(location: 0, length: attributedString.length)) + self.attributedText = attributedString + } } diff --git a/GO_SOPT_Seminar_Assignment/Sources/Extensions/UIStackView+.swift b/GO_SOPT_Seminar_Assignment/Sources/Extensions/UIStackView+.swift index 89c93e8..85f1df0 100644 --- a/GO_SOPT_Seminar_Assignment/Sources/Extensions/UIStackView+.swift +++ b/GO_SOPT_Seminar_Assignment/Sources/Extensions/UIStackView+.swift @@ -9,10 +9,10 @@ import UIKit extension UIStackView { func addArrangedSubviews(_ views: UIView...) { - views.forEach { self.addArrangedSubview($0) $0.translatesAutoresizingMaskIntoConstraints = false } } } + diff --git a/GO_SOPT_Seminar_Assignment/ViewController.swift b/GO_SOPT_Seminar_Assignment/ViewController.swift deleted file mode 100644 index 4900825..0000000 --- a/GO_SOPT_Seminar_Assignment/ViewController.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// ViewController.swift -// GO_SOPT_Seminar_Assignment -// -// Created by 김다예 on 2023/04/24. -// - -import UIKit - -class ViewController: UIViewController { - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view. - } - - -} -