'๊ณต๊ฐ๊ธฐ๋ก' ์ด๋ผ๋ ํ ์ดํ๋ก์ ํธ ๋๋ด๋ฉฐ ๊ทธ๊ฒ์ ๋ํ ๊ธฐ๋ก์ด๋ค.
์์ ค๋ผ์ค์ ๊ฐ์๋ฅผ ๋ฃ๋ค๊ฐ ๋์ ํ ๋ต๋ตํด์ ๊ทธ๋ฅ ๋ฌด์์ ๋ง๋ค์ด๋ณด์๋ฉฐ ์์ํ๋ค.
swift๋ ์กฐ๊ธ์ด๋ผ๋ ์นํด์ง๋ ค๋ ๋์ ๋
ธ๋ ฅ,,,์ ๊น๋จน์ง ์๊ธฐ์ํด์ ์ ์ด๋ณธ๋ค.
์ด ํ๋ก์ ํธ์์ ๋ค์๊ณผ ๊ฐ์๊ฒ๋ค์ ๋ค๋ฃฌ๋ค.
- ๋ทฐ์ปจํธ๋กค๋ฌ๋ ์นํด์ง๊ธฐ
- UIImagePickerController๋ฅผ ์ด์ฉํ ์ฌ์ง์ฒจ๋ถ
- CoreData๋ผ๋ Framework๋ฅผ ์ฌ์ฉํ CRUD๊ตฌํ
- TableView, TableViewCell, ์ปค์คํ ์ ์ด๋ ์ด๋ป๊ฒ๋ ์นํด์ง๊ธฐ
1. ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ์นํด์ง๊ธฐ
Figma๋ก ui๋์์ธ
๋จผ์ figma๋ผ๋ ๋์์ธํด๋ก ์ฑ์ ์๊น์๋ฅผ ๋ง๋ค์๋ค.

ui ์ด๋ป๊ฒ์ง์ง,,์์ดํจ๋์ ๋์ถฉ ๊ทธ๋ ค์ผํ๋ ํ๋์ค์ ์ ํ๋ธ ๋ณด๋ค๊ฐ ์ฐ์ฐํ ์๊ฒ๋๋๋ฐ, ์ด๊ฑฐ๋ผ๋ฉด ๋๋ ์ธ์ ์๊ฒ ๋ค ์ถ์๋ค.
๊ทธ๋์ ๊ทธ๋ ๋ฐค์์ ๋ง๋ค์ด ๋ณด์๋ค.
์ด๋ฏธ์ง์์ค๋ Figma์์ ์ด๊ฒ์ ๊ฒ ๊ฒ์ํ๋ฉด ๊ตฌํ ์์๋ค.( https://www.figma.com/community ์์ ๊ฒ์ํ๋ฉด ํธํ๋ค.)
ํ๋ ์ฌ๊ธฐ์ ๊ธฐ์ ๊ฐ์ ธ์๋๋ ์ด๋ฆฐํญ์ด ์์ฒญ ๋ง์์ ๊ฐ๊ด์ด์๋ค....
๋ฐ์น์คํฌ๋ฆฐ
๋จผ์ ๋ฐ์น์คํฌ๋ฆฐ์ ๊ณต๊ฐ๊ธฐ๋ก๋ถํฐ ๋์ด๋ค.
figma์์ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์จ๋ค. ์ฐ์ธก ํ๋จ์ export์์ 3x (์์ดํฐx๋ 3x) ๋ก ์ ์ฅ.

์ด๋ฏธ์ง๋ทฐ ๋ง๋ค์ด์ ์ด๋ฏธ์ง ๋ฃ์ด์ฃผ๊ณ ์คํ ๋ ์ด์์ ์ ์ฉํ ๋ค์ AppDelegate์์ ๋ฐ์น์คํฌ๋ฆฐ ๋์ธ ์๊ฐ์ ์กฐ์ ํ๋ค.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
Thread.sleep(forTimeInterval: 0.7) //์ด๋จ์
return true
}
๋ฉ์ธ ํ์ด์ง
์คํ ๋ฆฌ๋ณด๋์์ ์ด๋ฏธ์ง๋ทฐ ๋ง๋ค์ด์ ๋๋ฑ๋๋ฑ ์ ์ฉํ๋ค. ์คํ ๋ ์ด์์์ ์ ๋นํ ์ ๋นํ,,

์ด์ ๋ทฐ ํ๋๋ฅผ ๋ ๋ง๋ค์ด์ MainViewController๋ WriteViewController๋ ์ฐ๊ฒฐํ๋ค.
๊ฐ๋จํ๋ค. ๋ทฐํ๋ ๋ง๋ค๊ณ UIViewController๋ฅผ ์์๋ฐ๋ swift ํด๋์ค๋ฅผ ๋ง๋ค์ด์ WriteViewController์ ์ ์ฉ์ํจ ํ์
WriteViewController์ ID๋ฅผ ์ฃผ๊ณ MainViewController์ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์ฝ๋๋ฅผ ์ง์ฃผ๋ฉด ๋.
+๋ฒํผ์ด ๋ทฐ๋ฅผ ํธ์ถํ ๊ฑฐ๋ค.




์ด์ ๋ทฐ๋ฅผ ์ฐ๊ฒฐํ ๊ฑด๋ฐ, ๋ทฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ง๋ง ๊ทธ์ค ์ฝ๋๋ฅผ ํตํ ์ฐ๊ฒฐ์ ํ ๊ฑฐ๋ค.
์ธ๊ทธ๋ก ์ฐ๊ฒฐํ๋ฉด ์คํ ๋ฆฌ๋ณด๋์ ํ์ดํ๋ ์๊ธฐ๊ณ ์ด๋ป์ง์ง๋ง, ์ ๋๋ฉ์ด์
๋ณ๊ฒฝ์ ๋ชจ๋ฅด๊ณ ๊ฐ ๋๊ฒจ์ฃผ๊ณ ๋ฐ๊ณ ํ๊ธฐ ํ๋ค๊ฒ๊ฐ๊ธฐ ๋๋ฌธ์,,
๋ทฐ์ ๋ถ์ฌํ ID๊ฐ ํ์ํ๋ค.
๋ด๊ฐ ๋ถ์ฌํ ID๋ WriteView ์ด๊ณ , ํ์คํฌ๋ฆฐ์ผ๋ก ๋์ธ๊ฒ์ด๋ฉฐ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
(์ด์ชฝ์์ ๋ทฐ์ ๋ทฐ๋ฅผ ์ฐ๊ฒฐ์ํค๋ ๋ฐฉ๋ฒ๋ค์ ๋ํด์ ์๋ ค์ค๋ค. ๋ทฐ ์ ํ ์ ๋๋ฉ์ด์
๋ฑ๋ ์ ์ ์์)
@IBAction func writeBtnPressed(_ sender: Any) {
guard let wvc = self.storyboard?.instantiateViewController(withIdentifier: "WriteView") else {
return
}
wvc.modalPresentationStyle = .fullScreen
self.present(wvc, animated: true)
}

์์ฑ ํ์ด์ง

๋ฒํผ์ด๋ ํ
์คํธํ๋, ๋ผ๋ฒจ์ ๋ฐฐ์นํ๋ค.
์์ฑํ์ด์ง์ ์ง์
ํ๋ฉด ์ ์ผ๋จผ์ ์ฅ์๋ฅผ ์
๋ ฅํ๊ฒ ๋ง๋ค๊ฒ์ด๊ธฐ ๋๋ฌธ์, viewDidLoad์ ๊ทธ๋ ๊ฒ ์ง์ ํ๋ค.
์
๋ ฅ์ ์๋ฃํ๋ฉด ์ฅ์์
๋ ฅ์นธ์ ๋นํ์ฑํ๋๊ณ , ๋ผ๋ฒจ์ ํ๋ ์ด์คํ๋๊ฐ ์ด๋ฏธ์ง ์ฒจ๋ถ๋ฅผ ์๋ดํ๋ค.
์ํฐ๋ฅผ ์
๋ ฅํ ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
override func viewDidLoad() {
super.viewDidLoad()
.....
PlaceNameField.delegate = self //์์ ์ ํ
์คํธํ๋๋ก ์
๋ ฅํด์ฃผ์.
.....
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == self.PlaceNameField {
//to do....
}
return true
}
2. UIImagePickerController๋ฅผ ์ด์ฉํ ์ฌ์ง์ฒจ๋ถ

ํ๋จ์ ์จ๋ฒ/์นด๋ฉ๋ผ ๋ฒํผ๋ฐ๋ฅผ ๋ง๋ค์ด์ฃผ์.
์จ๋ฒ ๋ฒํผ์ ๋๋ฅด๋ฉด ์จ๋ฒ์์, ์นด๋ฉ๋ผ ๋ฒํผ์ ๋๋ฅด๋ฉด ์นด๋ฉ๋ผ์์ ์ฌ์ง์ ๋ฐ์ฌ๊ฒ์ด๋ค. ๊ฐ๊ฐ์ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
(์ด์ชฝ์์ ์ด๋ฏธ์ง ์ฒจ๋ถ์ ๋ํ ์ค๋ช
์ ๋ณผ ์ ์์)
@IBAction func albumBtn(_ sender: Any) {
self.imagePickerContoller.sourceType = .photoLibrary
self.present(self.imagePickerContoller, animated: true, completion: nil)
}//์จ๋ฒ ๋ฒํผ ๋๋ฅด๋ฉด ์ฌ์ง ์ฒจ๋ถ ์คํ
@IBAction func cameraBtn(_ sender: Any) {
self.imagePickerContoller.sourceType = .camera
self.present(self.imagePickerContoller, animated: true, completion: nil)
}//์นด๋ฉ๋ผ ๋ฒํผ ๋๋ฅด๋ฉด ์ฌ์ง ์ฐ๊ณ ์ฒจ๋ถ ์คํ
๊ทธ๋ฆฌ๊ณ extensionํด์ imagePickerController ํจ์๋ฅผ ๋ฌ์์ฃผ์.
extension WriteViewController{
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let picFromInfo = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
{
dismiss(animated: true, completion: nil)
self.picture.image = picFromInfo
}
}
} //์ด๋ฏธ์ง ์ฒจ๋ถ ๋์ ๊ด๋ จ WriteViewController ์ถ๊ฐ๋์
3. CoreData๋ผ๋ Framework๋ฅผ ์ฌ์ฉํ CRUD๊ตฌํ ๋ถ๋ถ๋ถํฐ๋ ๋ค์ ํฌ์คํธ์!
'learnings > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS/Swift] ์ธ์คํด์ค์ ์ํ ์ฐธ์กฐ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ๋์ (0) | 2024.03.21 |
---|---|
[iOS/Swift] TableView์์ SnapScroll (magnetic scroll) ๊ตฌํ (0) | 2023.01.20 |
[iOS/Swift] #1-2 ๋์ ์ฒซ ํ ์ดํ๋ก์ ํธ (0) | 2021.09.23 |
[iOS/Swift] ๋ฉ๋ชจ (0) | 2021.07.01 |
[iOS/Swift] #0 ์ค์ํํธ, ๊ฐ๋ณด์ ๊ฐ๋ณด์~ (0) | 2021.06.26 |
'๊ณต๊ฐ๊ธฐ๋ก' ์ด๋ผ๋ ํ ์ดํ๋ก์ ํธ ๋๋ด๋ฉฐ ๊ทธ๊ฒ์ ๋ํ ๊ธฐ๋ก์ด๋ค.
์์ ค๋ผ์ค์ ๊ฐ์๋ฅผ ๋ฃ๋ค๊ฐ ๋์ ํ ๋ต๋ตํด์ ๊ทธ๋ฅ ๋ฌด์์ ๋ง๋ค์ด๋ณด์๋ฉฐ ์์ํ๋ค.
swift๋ ์กฐ๊ธ์ด๋ผ๋ ์นํด์ง๋ ค๋ ๋์ ๋
ธ๋ ฅ,,,์ ๊น๋จน์ง ์๊ธฐ์ํด์ ์ ์ด๋ณธ๋ค.
์ด ํ๋ก์ ํธ์์ ๋ค์๊ณผ ๊ฐ์๊ฒ๋ค์ ๋ค๋ฃฌ๋ค.
- ๋ทฐ์ปจํธ๋กค๋ฌ๋ ์นํด์ง๊ธฐ
- UIImagePickerController๋ฅผ ์ด์ฉํ ์ฌ์ง์ฒจ๋ถ
- CoreData๋ผ๋ Framework๋ฅผ ์ฌ์ฉํ CRUD๊ตฌํ
- TableView, TableViewCell, ์ปค์คํ ์ ์ด๋ ์ด๋ป๊ฒ๋ ์นํด์ง๊ธฐ
1. ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ์นํด์ง๊ธฐ
Figma๋ก ui๋์์ธ
๋จผ์ figma๋ผ๋ ๋์์ธํด๋ก ์ฑ์ ์๊น์๋ฅผ ๋ง๋ค์๋ค.

ui ์ด๋ป๊ฒ์ง์ง,,์์ดํจ๋์ ๋์ถฉ ๊ทธ๋ ค์ผํ๋ ํ๋์ค์ ์ ํ๋ธ ๋ณด๋ค๊ฐ ์ฐ์ฐํ ์๊ฒ๋๋๋ฐ, ์ด๊ฑฐ๋ผ๋ฉด ๋๋ ์ธ์ ์๊ฒ ๋ค ์ถ์๋ค.
๊ทธ๋์ ๊ทธ๋ ๋ฐค์์ ๋ง๋ค์ด ๋ณด์๋ค.
์ด๋ฏธ์ง์์ค๋ Figma์์ ์ด๊ฒ์ ๊ฒ ๊ฒ์ํ๋ฉด ๊ตฌํ ์์๋ค.( https://www.figma.com/community ์์ ๊ฒ์ํ๋ฉด ํธํ๋ค.)
ํ๋ ์ฌ๊ธฐ์ ๊ธฐ์ ๊ฐ์ ธ์๋๋ ์ด๋ฆฐํญ์ด ์์ฒญ ๋ง์์ ๊ฐ๊ด์ด์๋ค....
๋ฐ์น์คํฌ๋ฆฐ
๋จผ์ ๋ฐ์น์คํฌ๋ฆฐ์ ๊ณต๊ฐ๊ธฐ๋ก๋ถํฐ ๋์ด๋ค.
figma์์ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์จ๋ค. ์ฐ์ธก ํ๋จ์ export์์ 3x (์์ดํฐx๋ 3x) ๋ก ์ ์ฅ.

์ด๋ฏธ์ง๋ทฐ ๋ง๋ค์ด์ ์ด๋ฏธ์ง ๋ฃ์ด์ฃผ๊ณ ์คํ ๋ ์ด์์ ์ ์ฉํ ๋ค์ AppDelegate์์ ๋ฐ์น์คํฌ๋ฆฐ ๋์ธ ์๊ฐ์ ์กฐ์ ํ๋ค.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
Thread.sleep(forTimeInterval: 0.7) //์ด๋จ์
return true
}
๋ฉ์ธ ํ์ด์ง
์คํ ๋ฆฌ๋ณด๋์์ ์ด๋ฏธ์ง๋ทฐ ๋ง๋ค์ด์ ๋๋ฑ๋๋ฑ ์ ์ฉํ๋ค. ์คํ ๋ ์ด์์์ ์ ๋นํ ์ ๋นํ,,

์ด์ ๋ทฐ ํ๋๋ฅผ ๋ ๋ง๋ค์ด์ MainViewController๋ WriteViewController๋ ์ฐ๊ฒฐํ๋ค.
๊ฐ๋จํ๋ค. ๋ทฐํ๋ ๋ง๋ค๊ณ UIViewController๋ฅผ ์์๋ฐ๋ swift ํด๋์ค๋ฅผ ๋ง๋ค์ด์ WriteViewController์ ์ ์ฉ์ํจ ํ์
WriteViewController์ ID๋ฅผ ์ฃผ๊ณ MainViewController์ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์ฝ๋๋ฅผ ์ง์ฃผ๋ฉด ๋.
+๋ฒํผ์ด ๋ทฐ๋ฅผ ํธ์ถํ ๊ฑฐ๋ค.




์ด์ ๋ทฐ๋ฅผ ์ฐ๊ฒฐํ ๊ฑด๋ฐ, ๋ทฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ง๋ง ๊ทธ์ค ์ฝ๋๋ฅผ ํตํ ์ฐ๊ฒฐ์ ํ ๊ฑฐ๋ค.
์ธ๊ทธ๋ก ์ฐ๊ฒฐํ๋ฉด ์คํ ๋ฆฌ๋ณด๋์ ํ์ดํ๋ ์๊ธฐ๊ณ ์ด๋ป์ง์ง๋ง, ์ ๋๋ฉ์ด์
๋ณ๊ฒฝ์ ๋ชจ๋ฅด๊ณ ๊ฐ ๋๊ฒจ์ฃผ๊ณ ๋ฐ๊ณ ํ๊ธฐ ํ๋ค๊ฒ๊ฐ๊ธฐ ๋๋ฌธ์,,
๋ทฐ์ ๋ถ์ฌํ ID๊ฐ ํ์ํ๋ค.
๋ด๊ฐ ๋ถ์ฌํ ID๋ WriteView ์ด๊ณ , ํ์คํฌ๋ฆฐ์ผ๋ก ๋์ธ๊ฒ์ด๋ฉฐ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
(์ด์ชฝ์์ ๋ทฐ์ ๋ทฐ๋ฅผ ์ฐ๊ฒฐ์ํค๋ ๋ฐฉ๋ฒ๋ค์ ๋ํด์ ์๋ ค์ค๋ค. ๋ทฐ ์ ํ ์ ๋๋ฉ์ด์
๋ฑ๋ ์ ์ ์์)
@IBAction func writeBtnPressed(_ sender: Any) {
guard let wvc = self.storyboard?.instantiateViewController(withIdentifier: "WriteView") else {
return
}
wvc.modalPresentationStyle = .fullScreen
self.present(wvc, animated: true)
}

์์ฑ ํ์ด์ง

๋ฒํผ์ด๋ ํ
์คํธํ๋, ๋ผ๋ฒจ์ ๋ฐฐ์นํ๋ค.
์์ฑํ์ด์ง์ ์ง์
ํ๋ฉด ์ ์ผ๋จผ์ ์ฅ์๋ฅผ ์
๋ ฅํ๊ฒ ๋ง๋ค๊ฒ์ด๊ธฐ ๋๋ฌธ์, viewDidLoad์ ๊ทธ๋ ๊ฒ ์ง์ ํ๋ค.
์
๋ ฅ์ ์๋ฃํ๋ฉด ์ฅ์์
๋ ฅ์นธ์ ๋นํ์ฑํ๋๊ณ , ๋ผ๋ฒจ์ ํ๋ ์ด์คํ๋๊ฐ ์ด๋ฏธ์ง ์ฒจ๋ถ๋ฅผ ์๋ดํ๋ค.
์ํฐ๋ฅผ ์
๋ ฅํ ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
override func viewDidLoad() {
super.viewDidLoad()
.....
PlaceNameField.delegate = self //์์ ์ ํ
์คํธํ๋๋ก ์
๋ ฅํด์ฃผ์.
.....
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == self.PlaceNameField {
//to do....
}
return true
}
2. UIImagePickerController๋ฅผ ์ด์ฉํ ์ฌ์ง์ฒจ๋ถ

ํ๋จ์ ์จ๋ฒ/์นด๋ฉ๋ผ ๋ฒํผ๋ฐ๋ฅผ ๋ง๋ค์ด์ฃผ์.
์จ๋ฒ ๋ฒํผ์ ๋๋ฅด๋ฉด ์จ๋ฒ์์, ์นด๋ฉ๋ผ ๋ฒํผ์ ๋๋ฅด๋ฉด ์นด๋ฉ๋ผ์์ ์ฌ์ง์ ๋ฐ์ฌ๊ฒ์ด๋ค. ๊ฐ๊ฐ์ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
(์ด์ชฝ์์ ์ด๋ฏธ์ง ์ฒจ๋ถ์ ๋ํ ์ค๋ช
์ ๋ณผ ์ ์์)
@IBAction func albumBtn(_ sender: Any) {
self.imagePickerContoller.sourceType = .photoLibrary
self.present(self.imagePickerContoller, animated: true, completion: nil)
}//์จ๋ฒ ๋ฒํผ ๋๋ฅด๋ฉด ์ฌ์ง ์ฒจ๋ถ ์คํ
@IBAction func cameraBtn(_ sender: Any) {
self.imagePickerContoller.sourceType = .camera
self.present(self.imagePickerContoller, animated: true, completion: nil)
}//์นด๋ฉ๋ผ ๋ฒํผ ๋๋ฅด๋ฉด ์ฌ์ง ์ฐ๊ณ ์ฒจ๋ถ ์คํ
๊ทธ๋ฆฌ๊ณ extensionํด์ imagePickerController ํจ์๋ฅผ ๋ฌ์์ฃผ์.
extension WriteViewController{
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let picFromInfo = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
{
dismiss(animated: true, completion: nil)
self.picture.image = picFromInfo
}
}
} //์ด๋ฏธ์ง ์ฒจ๋ถ ๋์ ๊ด๋ จ WriteViewController ์ถ๊ฐ๋์
3. CoreData๋ผ๋ Framework๋ฅผ ์ฌ์ฉํ CRUD๊ตฌํ ๋ถ๋ถ๋ถํฐ๋ ๋ค์ ํฌ์คํธ์!
'learnings > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS/Swift] ์ธ์คํด์ค์ ์ํ ์ฐธ์กฐ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ๋์ (0) | 2024.03.21 |
---|---|
[iOS/Swift] TableView์์ SnapScroll (magnetic scroll) ๊ตฌํ (0) | 2023.01.20 |
[iOS/Swift] #1-2 ๋์ ์ฒซ ํ ์ดํ๋ก์ ํธ (0) | 2021.09.23 |
[iOS/Swift] ๋ฉ๋ชจ (0) | 2021.07.01 |
[iOS/Swift] #0 ์ค์ํํธ, ๊ฐ๋ณด์ ๊ฐ๋ณด์~ (0) | 2021.06.26 |