Skip to content

Commit

Permalink
feat: ScrollableView & 앱 디자인 컬러 추가 (#12)
Browse files Browse the repository at this point in the history
* feat: TabBarController 설정 및 탭별 ViewController 생성(#10)

* feat: ScrollableView 구현 (#11)

* feat: 앱 디자인 컬러 추가
  • Loading branch information
SongTaehwan committed May 25, 2022
1 parent 939a746 commit da6f09d
Show file tree
Hide file tree
Showing 22 changed files with 742 additions and 72 deletions.
115 changes: 104 additions & 11 deletions ios/AirBnb/AirBnb.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,35 @@
/* Begin PBXBuildFile section */
E4409DD4283B2A0E005C6BA1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4409DD3283B2A0E005C6BA1 /* AppDelegate.swift */; };
E4409DD6283B2A0E005C6BA1 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4409DD5283B2A0E005C6BA1 /* SceneDelegate.swift */; };
E4409DD8283B2A0E005C6BA1 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4409DD7283B2A0E005C6BA1 /* ViewController.swift */; };
E4409DD8283B2A0E005C6BA1 /* HomeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4409DD7283B2A0E005C6BA1 /* HomeController.swift */; };
E4409DDD283B2A12005C6BA1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E4409DDC283B2A12005C6BA1 /* Assets.xcassets */; };
E4409DE0283B2A12005C6BA1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E4409DDE283B2A12005C6BA1 /* LaunchScreen.storyboard */; };
E4588F99283E15AC00544A6D /* ScrollableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4588F98283E15AC00544A6D /* ScrollableView.swift */; };
E4588F9D283E281E00544A6D /* UIColor+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4588F9C283E281E00544A6D /* UIColor+Extensions.swift */; };
E4BE2A39283CC8A9000099E5 /* Toolbox in Frameworks */ = {isa = PBXBuildFile; productRef = E4BE2A38283CC8A9000099E5 /* Toolbox */; };
E4BE2A47283DFD48000099E5 /* WishListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4BE2A46283DFD48000099E5 /* WishListViewController.swift */; };
E4BE2A49283DFD5F000099E5 /* ReservationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4BE2A48283DFD5F000099E5 /* ReservationViewController.swift */; };
E4BE2A4C283E0500000099E5 /* UIImage+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4BE2A4B283E0500000099E5 /* UIImage+Extensions.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
E4409DD0283B2A0E005C6BA1 /* AirBnb.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; name = AirBnb.app; path = "/Users/song/workspace/dev/ios/airbnb/ios/AirBnb/build/Debug-iphoneos/AirBnb.app"; sourceTree = "<absolute>"; };
E4409DD3283B2A0E005C6BA1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
E4409DD5283B2A0E005C6BA1 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
E4409DD7283B2A0E005C6BA1 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
E4409DD7283B2A0E005C6BA1 /* HomeController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeController.swift; sourceTree = "<group>"; };
E4409DDC283B2A12005C6BA1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
E4409DDF283B2A12005C6BA1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
E4409DE1283B2A12005C6BA1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
E4588F98283E15AC00544A6D /* ScrollableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollableView.swift; sourceTree = "<group>"; };
E4588F9C283E281E00544A6D /* UIColor+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Extensions.swift"; sourceTree = "<group>"; };
E45F2A7A283B2CCC00F0CB7C /* debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = debug.xcconfig; sourceTree = "<group>"; };
E45F2A7B283B2CD300F0CB7C /* release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = release.xcconfig; sourceTree = "<group>"; };
E45F2A7D283B2F2200F0CB7C /* .swiftformat */ = {isa = PBXFileReference; lastKnownFileType = text; path = .swiftformat; sourceTree = "<group>"; };
E45F2A7E283B2F4F00F0CB7C /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = "<group>"; };
E4BE2A37283CC86E000099E5 /* Toolbox */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Toolbox; sourceTree = "<group>"; };
E4BE2A3D283DFA7B000099E5 /* AirBnb.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AirBnb.app; sourceTree = BUILT_PRODUCTS_DIR; };
E4BE2A46283DFD48000099E5 /* WishListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WishListViewController.swift; sourceTree = "<group>"; };
E4BE2A48283DFD5F000099E5 /* ReservationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReservationViewController.swift; sourceTree = "<group>"; };
E4BE2A4B283E0500000099E5 /* UIImage+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Extensions.swift"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand All @@ -51,24 +61,32 @@
E45F2A7B283B2CD300F0CB7C /* release.xcconfig */,
E4409DD2283B2A0E005C6BA1 /* AirBnb */,
E4BE2A36283CC86E000099E5 /* Frameworks */,
E4BE2A3D283DFA7B000099E5 /* AirBnb.app */,
);
sourceTree = "<group>";
};
E4409DD2283B2A0E005C6BA1 /* AirBnb */ = {
isa = PBXGroup;
children = (
E4BE2A3E283DFAB2000099E5 /* Application */,
E4BE2A40283DFBA3000099E5 /* Presentation */,
E45F2A81283B30C300F0CB7C /* Resources */,
E4409DD3283B2A0E005C6BA1 /* AppDelegate.swift */,
E4409DD5283B2A0E005C6BA1 /* SceneDelegate.swift */,
E4409DD7283B2A0E005C6BA1 /* ViewController.swift */,
E4409DE1283B2A12005C6BA1 /* Info.plist */,
);
path = AirBnb;
sourceTree = "<group>";
};
E4588F97283E158F00544A6D /* View */ = {
isa = PBXGroup;
children = (
E4588F98283E15AC00544A6D /* ScrollableView.swift */,
);
path = View;
sourceTree = "<group>";
};
E45F2A81283B30C300F0CB7C /* Resources */ = {
isa = PBXGroup;
children = (
E4409DE1283B2A12005C6BA1 /* Info.plist */,
E4409DDC283B2A12005C6BA1 /* Assets.xcassets */,
E4409DDE283B2A12005C6BA1 /* LaunchScreen.storyboard */,
);
Expand All @@ -83,6 +101,76 @@
name = Frameworks;
sourceTree = "<group>";
};
E4BE2A3E283DFAB2000099E5 /* Application */ = {
isa = PBXGroup;
children = (
E4409DD3283B2A0E005C6BA1 /* AppDelegate.swift */,
E4409DD5283B2A0E005C6BA1 /* SceneDelegate.swift */,
);
path = Application;
sourceTree = "<group>";
};
E4BE2A40283DFBA3000099E5 /* Presentation */ = {
isa = PBXGroup;
children = (
E4588F97283E158F00544A6D /* View */,
E4BE2A41283DFBAB000099E5 /* Scenes */,
E4BE2A42283DFBFF000099E5 /* Utils */,
);
path = Presentation;
sourceTree = "<group>";
};
E4BE2A41283DFBAB000099E5 /* Scenes */ = {
isa = PBXGroup;
children = (
E4BE2A43283DFC46000099E5 /* Home */,
E4BE2A44283DFD1F000099E5 /* WishList */,
E4BE2A45283DFD28000099E5 /* Reservation */,
);
path = Scenes;
sourceTree = "<group>";
};
E4BE2A42283DFBFF000099E5 /* Utils */ = {
isa = PBXGroup;
children = (
E4BE2A4A283E04EC000099E5 /* Extensions */,
);
path = Utils;
sourceTree = "<group>";
};
E4BE2A43283DFC46000099E5 /* Home */ = {
isa = PBXGroup;
children = (
E4409DD7283B2A0E005C6BA1 /* HomeController.swift */,
);
path = Home;
sourceTree = "<group>";
};
E4BE2A44283DFD1F000099E5 /* WishList */ = {
isa = PBXGroup;
children = (
E4BE2A46283DFD48000099E5 /* WishListViewController.swift */,
);
path = WishList;
sourceTree = "<group>";
};
E4BE2A45283DFD28000099E5 /* Reservation */ = {
isa = PBXGroup;
children = (
E4BE2A48283DFD5F000099E5 /* ReservationViewController.swift */,
);
path = Reservation;
sourceTree = "<group>";
};
E4BE2A4A283E04EC000099E5 /* Extensions */ = {
isa = PBXGroup;
children = (
E4BE2A4B283E0500000099E5 /* UIImage+Extensions.swift */,
E4588F9C283E281E00544A6D /* UIColor+Extensions.swift */,
);
path = Extensions;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
Expand All @@ -105,7 +193,7 @@
E4BE2A38283CC8A9000099E5 /* Toolbox */,
);
productName = AirBnb;
productReference = E4409DD0283B2A0E005C6BA1 /* AirBnb.app */;
productReference = E4BE2A3D283DFA7B000099E5 /* AirBnb.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
Expand Down Expand Up @@ -199,8 +287,13 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E4409DD8283B2A0E005C6BA1 /* ViewController.swift in Sources */,
E4BE2A49283DFD5F000099E5 /* ReservationViewController.swift in Sources */,
E4409DD8283B2A0E005C6BA1 /* HomeController.swift in Sources */,
E4BE2A47283DFD48000099E5 /* WishListViewController.swift in Sources */,
E4588F9D283E281E00544A6D /* UIColor+Extensions.swift in Sources */,
E4BE2A4C283E0500000099E5 /* UIImage+Extensions.swift in Sources */,
E4409DD4283B2A0E005C6BA1 /* AppDelegate.swift in Sources */,
E4588F99283E15AC00544A6D /* ScrollableView.swift in Sources */,
E4409DD6283B2A0E005C6BA1 /* SceneDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -343,7 +436,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = FCQD35AW5P;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = AirBnb/Info.plist;
INFOPLIST_FILE = AirBnb/Resources/Info.plist;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
Expand Down Expand Up @@ -372,7 +465,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = FCQD35AW5P;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = AirBnb/Info.plist;
INFOPLIST_FILE = AirBnb/Resources/Info.plist;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
Expand Down
21 changes: 0 additions & 21 deletions ios/AirBnb/AirBnb/AppDelegate.swift

This file was deleted.

28 changes: 28 additions & 0 deletions ios/AirBnb/AirBnb/Application/AppDelegate.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
//
// AppDelegate.swift
// AirBnb
//
// Created by 송태환 on 2022/05/23.
//

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_: UIApplication,
didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
true
}

// MARK: UISceneSession Lifecycle

func application(
_: UIApplication,
configurationForConnecting connectingSceneSession: UISceneSession,
options _: UIScene.ConnectionOptions
) -> UISceneConfiguration {
UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
}
52 changes: 52 additions & 0 deletions ios/AirBnb/AirBnb/Application/SceneDelegate.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
//
// SceneDelegate.swift
// AirBnb
//
// Created by 송태환 on 2022/05/23.
//

import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?

func scene(_ scene: UIScene, willConnectTo _: UISceneSession, options _: UIScene.ConnectionOptions) {
guard let scene = (scene as? UIWindowScene) else {
return
}

let tabBarController = UITabBarController()
let navigationController = UINavigationController(rootViewController: tabBarController)
let homeController = HomeController()
let wishListController = WishListViewController()
let reservationController = ReservationViewController()

homeController.tabBarItem = .init(
title: "검색",
image: .magnifier,
selectedImage: .magnifier
)

wishListController.tabBarItem = .init(
title: "위시리스트",
image: .heart,
selectedImage: .heartFilled
)

reservationController.tabBarItem = .init(
title: "예약",
image: .profile,
selectedImage: .profileFilled
)

tabBarController.viewControllers = [
homeController,
wishListController,
reservationController
]

self.window = UIWindow(windowScene: scene)
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
}
}
71 changes: 71 additions & 0 deletions ios/AirBnb/AirBnb/Presentation/Scenes/Home/HomeController.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
//
// HomeController.swift
// AirBnb
//
// Created by 송태환 on 2022/05/23.
//

import SnapKit
import UIKit

class HomeController: UIViewController {
private let scrollView = ScrollableView()

private let searchBar: UITextField = {
let textField = UITextField()
textField.backgroundColor = .gray
return textField
}()

// MARK: - Life Cycles

override func viewDidLoad() {
super.viewDidLoad()
self.configureUI()
}

// MARK: - UI Configuration

private func configureUI() {
self.navigationController?.navigationBar.isHidden = true
self.view.backgroundColor = .systemBackground
self.configureScrollView()
self.configureSearchBar()
}

private func configureScrollView() {
self.view.addSubview(self.scrollView)
self.scrollView.contentView.snp.makeConstraints { make in
make.height.greaterThanOrEqualTo(self.view.safeAreaLayoutGuide.snp.height)
}

self.scrollView.snp.makeConstraints { make in
make.edges.equalTo(self.view.safeAreaLayoutGuide)
}
}

private func configureSearchBar() {
let searchBarWrapper = UIView()
self.scrollView.addContent(searchBarWrapper)
searchBarWrapper.addSubview(self.searchBar)

let imageView = UIImageView(image: .magnifier)
imageView.contentMode = .scaleAspectFit
self.searchBar.leftView = imageView
self.searchBar.leftViewMode = .always
self.searchBar.layer.cornerRadius = 10
self.searchBar.backgroundColor = .gray

searchBarWrapper.snp.makeConstraints { make in
make.top.equalTo(self.scrollView.contentView.snp.top)
make.leading.equalTo(self.scrollView.contentView.snp.leading)
make.trailing.equalTo(self.scrollView.contentView.snp.trailing)
}

self.searchBar.snp.makeConstraints { make in
let edgeInsets = UIEdgeInsets(top: 16, left: 16, bottom: 16, right: 16)
make.edges.equalTo(searchBarWrapper).inset(edgeInsets)
make.height.equalTo(40)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
//
// ReservationViewController.swift
// AirBnb
//
// Created by 송태환 on 2022/05/25.
//

import SnapKit
import UIKit

class ReservationViewController: UIViewController {
// MARK: - Life Cycles

override func viewDidLoad() {
super.viewDidLoad()
self.configureUI()
}

// MARK: - UI Configuration

private func configureUI() {
self.view.backgroundColor = .systemBackground
}
}
Loading

0 comments on commit da6f09d

Please sign in to comment.