-
Notifications
You must be signed in to change notification settings - Fork 6
๐ฑiOS ํ ๋ก ๊ฑฐ๋ฆฌ
fElix edited this page Dec 1, 2020
·
20 revisions
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ๋ฉ์ปจ๋ฒค์ ๋งํฌ ๋ฅผ ์ฐธ๊ณ ํ๋, ๋ณ๋๋ก ์ ๋ฆฌํ ํ์๊ฐ ์๋ค๊ณ ์๊ฐ๋๋ฉด ์๋์ ๊ธฐ์ฌํ๋ค.
1. class, struct , protocol, extension ์ ์ ์ธ ํ ์ฒซ ์ค ๊ฐํ
class Example {
let exampleNumber: Int
}
2. switch-case ๊ตฌ๋ฌธ์ ๊ฐ case ์ฌ์ด๋ ๊ฐํ
switch type {
case .A:
print("A ์
๋๋ค.")
case .B:
print("B ์
๋๋ค.")
case .C:
print("C ์
๋๋ค.")
}
3. ํ๋ผ๋ฏธํฐ๊ฐ 3๊ฐ ์ด์์ผ ์ ๊ฐํํ์ฌ ์์ฑํ๋ค
init(
window: UIWindow?,
factory: CoordinatorFactoryable,
signinChecker: SigninCheckable
) {
self.window = window
initCoordinatorFactory = factory
self.signinChecker = signinChecker
}
- CollectionView ์ฌ์ฉ์ FlowLayout ์ lazy var ๋ธ๋ญ ๋ด๋ถ (IBOutlet ์ผ์ didSet) ์ ์ ์ธํ๋ค.
- MVVM-C ์ํคํ
์ฒ ํจํด ์ฌ์ฉ
- ์ด์๋น ํ ๊ฐ ์ด์์ ํ
์คํธ ์ผ์ด์ค ์์ฑ
- ํ๋ฉด ์ ํ ์ ViewController ์ ์์ฑ์๋ก ์์กด์ฑ ์ฃผ์
- View์ ๋ชจ๋ ์์ฑ์ ์ฝ๋๋ก ์ค์
- ์ ์ ์ธ ๋ทฐ๋ Storyboard๋ก ์์ฑ
- ๋์ ์ธ ๋ทฐ๋ ์ฝ๋๋ก ์์ฑ
- Scene ๋จ์ ๋ณ๋ก ๋ถ๋ฆฌ
- MVVM ์์ ViewModel ์ ๋น์ฆ๋์ค ๋ก์ง์, View๋ presentation ๋ฐ presentation logic ์ ์ฒ๋ฆฌํ๋ค.
- MVVM-C ๋ฅผ ํตํด ํ๋ฉด์ ์ ํํ๋ presentation logic ์ Coordinator ๊ฐ ์ฒ๋ฆฌํ๊ฒ ํ์ฌ View ๋ฅผ ๊ฐ๋ณ๊ฒ
๋ง๋ค๊ธฐ ์ํจ
- ๋ํ ๊ฐ์ ํ๋ฉด์ผ๋ก ์ ํํ๊ณ ์ถ์ ๊ณณ์ด ๋ง์์ง๋ฉด ํด๋น Coordinator ๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ๊ฐ์ ์ฝ๋๊ฐ ์ฌ๋ฌ ํด๋์ค์์
๋ฐ๋ณต๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ค.
- ๋ํ ์ ํ๋๋ ํ๋ฉด์ ๋ณ๊ฒฝํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์ผ์ผ์ด ์ฐพ์ ํ์ ์์ด ํด๋นํ๋ Coordinator ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ํ์ Coordinate ๋ก๋ถํฐ UIViewController ๊ฐ์ฒด๋ฅผ ๋ฐํ๋ฐ๊ณ ์์ Coordinate ์์
์ด๋ฅผ present or push ํ๋ ๊ฒ์ด ๋ ์์ฐ์ค๋ฝ๋ค.
- ๊ทธ๋ ๊ฒ ํ์ง ์์ผ๋ฉด ํ์ Coordinate ์์ present or push ํด์ผ ํ๋๋ฐ ์ต์ด SceneCoordinate ์
present ๋ push ํ (์ฌ์ฉํ์ง ์๋) Root UIViewController or UINavigationController ๋ฅผ
๊ฐ์ ๋ก ๋ฃ์ด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ค์ ๋ถ์์ฐ์ค๋ฌ์์ง๋ค.
- openURL ์ ํ๋ ค๋ฉด UIApplication.shared.open(url) ์ ํด์ค์ผ ํ๋๋ฐ, ์ด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด UIKit ์
import ํด์ผ ํจ Model ์ธ Router ์์ UIKit ์ import ํ๊ณ ์๋ ๊ฒ์ ๋ถ์์ฐ์ค๋ฌ์ฐ๋ฏ๋ก ์ด๋ฅผ
Presentation Logic ์ผ๋ก ๊ฐ์ฃผํ์ฌ Coordinator ์์ ์ฒ๋ฆฌํ๊ฒ ํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
์ฐธ๊ณ ๋งํฌ: ๋งํฌ
extension Date {
func toString() -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
return dateFormatter.string(from: self)
}
}
-
UITapGestureRecognizer ์ฐธ๊ณ ๋งํฌ
-
ํน์ ์์ญ์ ํฐ์น์ ๋ํด์๋ UITapGestureRecognizer ์ ์ด๋ฒคํธ๋ฅผ ๋ชป ๋ฐ๊ฒ ํ๋ ๋ฐฉ๋ฒ
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return touch.view?.isDescendant(of: commentView) == true ? false : true
}
CollectionView๊ฐ StackView์ ArrangedSubview๋ก ์ถ๊ฐ๋์ด ContentSize๊ฐ ์กํ์ง ์๋ ๊ฒฝ์ฐ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ
- UICollectionView๋ฅผ SubClassing ํ์ฌ ์๋์ ๋ณ์๋ฅผ override ํ๊ธฐ
override var contentSize:CGSize { didSet { invalidateIntrinsicContentSize() } } override var intrinsicContentSize: CGSize { layoutIfNeeded() return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height) }
- ํด๋น collection view๋ autolayout์ ์ก์ง ์์๋ค.
- Apple ๊ณต์ ๋ฌธ์์ ๋์ค๋
intrinsicContentSize
๋ฅผ ์ฐพ์๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ๋ค.- custom view๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ์ด์์ ์์คํ
์ด ์ธ์ํ์ง ๋ชปํ๋ content๋ฅผ ํ์ํ๋ค. ์ด ์์ฑ์ ์ค์ ํ๋ฉด custom view๊ฐ ๋ ์ด์์ ์์คํ
์ content๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ๋ ํฌ๊ธฐ๋ฅผ ์ ๋ฌํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ณ๊ฒฝ๋ height์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ width๋ฅผ ๋ฐฐ์น ์์คํ
์ ๋์ ์ผ๋ก ์ ๋ฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ์ด ๋ณธ์ง์ ์ธ ํฌ๊ธฐ๋ ์ปจํ
์ธ ํ๋ ์๊ณผ ๋
๋ฆฝ์ ์ด์ด์ผ ํ๋ค. custom view์ ์ง์ ๋ dimension์ ๋ํ ๊ณ ์ ํ ํฌ๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ ํด๋น dimension์ ๋ํด
noIntrinsicMetric
์ ์ฌ์ฉํ ์ ์๋ค.
- custom view๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ์ด์์ ์์คํ
์ด ์ธ์ํ์ง ๋ชปํ๋ content๋ฅผ ํ์ํ๋ค. ์ด ์์ฑ์ ์ค์ ํ๋ฉด custom view๊ฐ ๋ ์ด์์ ์์คํ
์ content๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ๋ ํฌ๊ธฐ๋ฅผ ์ ๋ฌํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ณ๊ฒฝ๋ height์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ width๋ฅผ ๋ฐฐ์น ์์คํ
์ ๋์ ์ผ๋ก ์ ๋ฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ์ด ๋ณธ์ง์ ์ธ ํฌ๊ธฐ๋ ์ปจํ
์ธ ํ๋ ์๊ณผ ๋
๋ฆฝ์ ์ด์ด์ผ ํ๋ค. custom view์ ์ง์ ๋ dimension์ ๋ํ ๊ณ ์ ํ ํฌ๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ ํด๋น dimension์ ๋ํด
- Apple ๊ณต์ ๋ฌธ์์ ๋์ค๋
invalidateIntrinsicContentSize()
๋ฅผ ์ฐพ์๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ๋ค.- custom view์ intrinsicContentSize๋ฅผ ๋ฌดํจํํ๋ ๋ณ๊ฒฝ์ฌํญ์ด ์์ ๊ฒฝ์ฐ ์ด Method๋ฅผ ํธ์ถํด์ผํ๋ค. ์ด๋ฅผ ํตํด constraint๊ฐ ๋ณ๊ฒฝ๋๋ layout์ ๋ํด ์๋ก์ด
intrinsicContentSize
๋ฅผ ํ์ฉํ๊ฒ ํ๋ค.
- custom view์ intrinsicContentSize๋ฅผ ๋ฌดํจํํ๋ ๋ณ๊ฒฝ์ฌํญ์ด ์์ ๊ฒฝ์ฐ ์ด Method๋ฅผ ํธ์ถํด์ผํ๋ค. ์ด๋ฅผ ํตํด constraint๊ฐ ๋ณ๊ฒฝ๋๋ layout์ ๋ํด ์๋ก์ด
- Apple ๊ณต์๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ ์ฝ๋๋ฅผ ํด์ํด๋ณด๋ฉด, contentSize๊ฐ ๋ณํ ๊ฒฝ์ฐ
invalidateIntrinsicContentSize()
๋ฅผ ํตํด intrinsicContentSize property์ ๋ง๊ฒ view๋ฅผ ๊ฐฑ์ ํ ์ ์๋๋ก ๊ตฌํํ๋ ๋ฐฉ์์ด๋ค.
๐ฉ๐ปโ๐ป ๋ฐ์์ฐ | ๐ง๐ปโ๐ป ์ ๋ํ | ๐ง๐ปโ๐ป ์ด๊ฑดํ | ๐ง๐ปโ๐ป ์๋ช ๋ ฌ | ๐ง๐ปโ๐ป ์ฌ์๋ฏผ |
---|---|---|---|---|
@Park-SooYeon | @dh00n | @youngxpepp | @fElix-MR | @tksrl0379 |