๐ฑ iOS/-- UIKit
-
2023. 4. 25. ๋ฌธ์ Custom TabBar์ NavigationBar ๋ฅผ ๋ง๋ค์ผ์ด ์๊ฒผ๋๋ฐ VC์ ๋ฟ๋๋ถ๋ถ์ ์๊พธ Border? Shadow? ๊ฐ์ ์ค์ด ํ๋ ์๊ธด๋ค. Hierarchy๋ฅผ ๋ณด๋ ์ต์์ ๊ณ์ธต์ ๊น๋ง ImageView๊ฐ ๋ฌ๋ค. ๊ทธ๋์ ๊ตฌ๊ธ๋ง์ ์ข ํด๋ณด๋ UINavigationBarAppearance ๊ฐ์ฒด์ backgroundImage ํ๋กํผํฐ์ shadowImageํ๋กํผํฐ์ ๋น ์ด๋ฏธ์ง๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ์ํ๋๋๋ก ์์ ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ธ์ ๋ณด์๋ค. if #available(iOS 13.0, *) { let appearance = UINavigationBarAppearance() appearance.backgroundImage = UIImage() appearance.shadowImage..
(iOS) UITabBar, UINavigationBar shadow ์ ๊ฑฐ, border ์ ๊ฑฐ2023. 4. 25. ๋ฌธ์ Custom TabBar์ NavigationBar ๋ฅผ ๋ง๋ค์ผ์ด ์๊ฒผ๋๋ฐ VC์ ๋ฟ๋๋ถ๋ถ์ ์๊พธ Border? Shadow? ๊ฐ์ ์ค์ด ํ๋ ์๊ธด๋ค. Hierarchy๋ฅผ ๋ณด๋ ์ต์์ ๊ณ์ธต์ ๊น๋ง ImageView๊ฐ ๋ฌ๋ค. ๊ทธ๋์ ๊ตฌ๊ธ๋ง์ ์ข ํด๋ณด๋ UINavigationBarAppearance ๊ฐ์ฒด์ backgroundImage ํ๋กํผํฐ์ shadowImageํ๋กํผํฐ์ ๋น ์ด๋ฏธ์ง๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ์ํ๋๋๋ก ์์ ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ธ์ ๋ณด์๋ค. if #available(iOS 13.0, *) { let appearance = UINavigationBarAppearance() appearance.backgroundImage = UIImage() appearance.shadowImage..
2023.04.25 -
๊ฐ๋ฐ์ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด๋ฉด ๋ค์์ ๋ด์ฉ์ด ์๋ค. Declaration “์ฑ์ UI์ View์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด์ ๋ํ ๋ฐฐ๊ฒฝ์ด๋ค.” ์ฌ๊ธฐ๊น์ง๋ง ์ฝ์์๋๋ ๊ฐ์ด ์์จ๋ค. ์์ธํ๊ฒ ๋งํ๋ฉด UIKit์ ๋์ ๋ฐฉ์์ View ํผ์์๋ง ์ด๋ฃจ์ง์ ์๊ณ , ๋ค๋ฅธ ๊ฐ์ฒด๋ค๊ณผ ํจ๊ป ์ด๋ฃจ์ง๋ค. ์ด๋ UIWindow ๋ ์ผ๋ถ ์ฐธ์ฌํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ญ๊ฐ UIWindow๊ฐ UIView๋ณด๋ค ์์ํด๋์ค์ผ๊ฑฐ๋ผ๋ ์ด๋ฏธ์ง๊ฐ ์์๋๋ฐ ๋ฐ๋์๋ค UIWindow๋ UIView์ ํ์ ํด๋์ค๋ค. UIWindow์ ์๊ฐ์ ์ญํ UIWindow์ ์ญํ ์ View๋ฅผ ๋ํ๋ด๋ “์ก์" ์ญํ ์ด๋ค.(๋ค๋ฅธ ๋ทฐ๋ฅผ ๋ด๋ ์ปจํ ์ด๋) ๋ฐ๋์ UIWindow๊ฐ ์์ด์ผ ํ๋ฉด์ View๋ค์ ๋์คํ๋ ์ด ํ ์ ์๋ค. window๊ฐ ์ก์๋ผ๋ฉด, ๋ด๋ถ์ ๊ทธ๋ฆผ์ rootVie..
(iOS) UIWindow ์ ๊ดํ์ฌ๊ฐ๋ฐ์ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด๋ฉด ๋ค์์ ๋ด์ฉ์ด ์๋ค. Declaration “์ฑ์ UI์ View์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด์ ๋ํ ๋ฐฐ๊ฒฝ์ด๋ค.” ์ฌ๊ธฐ๊น์ง๋ง ์ฝ์์๋๋ ๊ฐ์ด ์์จ๋ค. ์์ธํ๊ฒ ๋งํ๋ฉด UIKit์ ๋์ ๋ฐฉ์์ View ํผ์์๋ง ์ด๋ฃจ์ง์ ์๊ณ , ๋ค๋ฅธ ๊ฐ์ฒด๋ค๊ณผ ํจ๊ป ์ด๋ฃจ์ง๋ค. ์ด๋ UIWindow ๋ ์ผ๋ถ ์ฐธ์ฌํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ญ๊ฐ UIWindow๊ฐ UIView๋ณด๋ค ์์ํด๋์ค์ผ๊ฑฐ๋ผ๋ ์ด๋ฏธ์ง๊ฐ ์์๋๋ฐ ๋ฐ๋์๋ค UIWindow๋ UIView์ ํ์ ํด๋์ค๋ค. UIWindow์ ์๊ฐ์ ์ญํ UIWindow์ ์ญํ ์ View๋ฅผ ๋ํ๋ด๋ “์ก์" ์ญํ ์ด๋ค.(๋ค๋ฅธ ๋ทฐ๋ฅผ ๋ด๋ ์ปจํ ์ด๋) ๋ฐ๋์ UIWindow๊ฐ ์์ด์ผ ํ๋ฉด์ View๋ค์ ๋์คํ๋ ์ด ํ ์ ์๋ค. window๊ฐ ์ก์๋ผ๋ฉด, ๋ด๋ถ์ ๊ทธ๋ฆผ์ rootVie..
2022.03.22 -
๋ฉ๋ชจ๋ฆฌ ๋์(Memory leak)๋ ? retain cycle๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ฒด๋ฅผ ํ ๋น ํด์ ํ ์ ์๋ ๊ฒฝ์ฐ์ ๋ฐ์ํ๋ค. Swift๋ ARC๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํ๋๋ฐ, ๋ ๊ฐ์ฒด ์ด์์ด ์๋ก์ ๋ํด ๊ฐํ ์ฐธ์กฐ๋ฅผ ํ๋ ๊ฒฝ์ฐ์ retain cycle์ด ๋ฐ์ํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐธ์กฐ ์นด์ดํ ์ด 0์ด ๋์ง ์์ deinit์ด ํธ์ถ๋์ง ์๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ๊ฐ์ฒด๊ฐ์ ์ํธ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ weak, unowned ํค์๋๋ฅผ ํตํด ์ฝํ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํด์ผํ๋ค. (์์ธํ ๋ด์ฉ์ ARC์ ๋ํด ์์๋ณด๋ฉด ๋๋ค.) class A{ var b: B? } class B{ var a: A? } func makeMemoryLeaks(){ let a = A() let b = B() a.b = b b.a = a } ๊ฐ๋จํ ์๋ฅผ ๋ค๋ฉด..
(iOS) ๋ฉ๋ชจ๋ฆฌ ์ด์ ๋๋ฒ๊น , ๋ฉ๋ชจ๋ฆฌ ๊ทธ๋ํ Xcode instrument, ๋ฉ๋ชจ๋ฆฌ ๋์๋ฉ๋ชจ๋ฆฌ ๋์(Memory leak)๋ ? retain cycle๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ฒด๋ฅผ ํ ๋น ํด์ ํ ์ ์๋ ๊ฒฝ์ฐ์ ๋ฐ์ํ๋ค. Swift๋ ARC๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํ๋๋ฐ, ๋ ๊ฐ์ฒด ์ด์์ด ์๋ก์ ๋ํด ๊ฐํ ์ฐธ์กฐ๋ฅผ ํ๋ ๊ฒฝ์ฐ์ retain cycle์ด ๋ฐ์ํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐธ์กฐ ์นด์ดํ ์ด 0์ด ๋์ง ์์ deinit์ด ํธ์ถ๋์ง ์๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ๊ฐ์ฒด๊ฐ์ ์ํธ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ weak, unowned ํค์๋๋ฅผ ํตํด ์ฝํ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํด์ผํ๋ค. (์์ธํ ๋ด์ฉ์ ARC์ ๋ํด ์์๋ณด๋ฉด ๋๋ค.) class A{ var b: B? } class B{ var a: A? } func makeMemoryLeaks(){ let a = A() let b = B() a.b = b b.a = a } ๊ฐ๋จํ ์๋ฅผ ๋ค๋ฉด..
2022.03.11 -
๊ณตํต์ Bounds, Frame ๋ชจ๋ View์ ์์น์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ UIView์ instance property์ธ CGRect ํ์ ์ด๋ผ๋ ์ ์ด ๊ณตํต์ ์ด๋ค. var frame: CGRect {get set} var bounds: CGRect {get set} // Frame property ์ ๊ทผ view.frame.origin.x view.frame.origin.y view.frame.size.width view.frame.size.height view.bounds.origin.x view.bounds.origin.y view.bounds.size.width view.bounds.size.height Frame (Instance Property) (๋ถ๋ฅ: UIKit > Views and Control..
(iOS) - UIKit์ Frame, Bounds ์ ์ฐจ์ด์ ๊ณตํต์ Bounds, Frame ๋ชจ๋ View์ ์์น์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ UIView์ instance property์ธ CGRect ํ์ ์ด๋ผ๋ ์ ์ด ๊ณตํต์ ์ด๋ค. var frame: CGRect {get set} var bounds: CGRect {get set} // Frame property ์ ๊ทผ view.frame.origin.x view.frame.origin.y view.frame.size.width view.frame.size.height view.bounds.origin.x view.bounds.origin.y view.bounds.size.width view.bounds.size.height Frame (Instance Property) (๋ถ๋ฅ: UIKit > Views and Control..
2022.02.22 -
#AppProject Target ๋น๋ํ ํ๋ก์ ํธ๋ฅผ ์ง์ ํ๊ณ , ๋น๋ํ์ฌ ์์ฑ๋ ์ต์ข ํ๋ก๋ํธ ex) ํ๊ตญ์ฉ, ์ค๊ตญ์ฉ, ๊ด๊ณ ์๋ ๋ฒ์ ผ, ์๋๋ฒ์ ผ...... ์ด๋ฐ์์ผ๋ก ๋น๋ํ ํ๋ก์ ํธ๋ฅผ ๋๋๋ ๊ฐ๋ Identity Bundle Identifier: ์ฑ์คํ ์ด์์ ์ฌ์ฉํ identifier (์ ์ผํ ๊ฐ์ด์ดํจ) Build: ๋น๋ ๋ฒํธ Deployment Info ์ฑ ๋ฐฐํฌ์ ํ์ํ ์ ๋ณด๋ค Target: iOS ์ต์๋ฒ์ ๊ณผ ๋๋ฐ์ด์ค ์ค์ (iPad, Mac, iPhone) Main Interface: ์ฑ ์คํํ ์ฒ์ ๋์ค๋ StoryBoard๋ฅผ ์ง์ . Device Orientation: ๊ธฐ๊ธฐ ํ์ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค. Status Bar Style: ์ฑ ์คํ์ ๋ณด์ฌ์ง๋ Status Bar์ ์คํ์ผ ์ค์ App Ic..
(iOS) - info.plist & appProject ( .xcodeproj )#AppProject Target ๋น๋ํ ํ๋ก์ ํธ๋ฅผ ์ง์ ํ๊ณ , ๋น๋ํ์ฌ ์์ฑ๋ ์ต์ข ํ๋ก๋ํธ ex) ํ๊ตญ์ฉ, ์ค๊ตญ์ฉ, ๊ด๊ณ ์๋ ๋ฒ์ ผ, ์๋๋ฒ์ ผ...... ์ด๋ฐ์์ผ๋ก ๋น๋ํ ํ๋ก์ ํธ๋ฅผ ๋๋๋ ๊ฐ๋ Identity Bundle Identifier: ์ฑ์คํ ์ด์์ ์ฌ์ฉํ identifier (์ ์ผํ ๊ฐ์ด์ดํจ) Build: ๋น๋ ๋ฒํธ Deployment Info ์ฑ ๋ฐฐํฌ์ ํ์ํ ์ ๋ณด๋ค Target: iOS ์ต์๋ฒ์ ๊ณผ ๋๋ฐ์ด์ค ์ค์ (iPad, Mac, iPhone) Main Interface: ์ฑ ์คํํ ์ฒ์ ๋์ค๋ StoryBoard๋ฅผ ์ง์ . Device Orientation: ๊ธฐ๊ธฐ ํ์ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค. Status Bar Style: ์ฑ ์คํ์ ๋ณด์ฌ์ง๋ Status Bar์ ์คํ์ผ ์ค์ App Ic..
2021.09.09 -
AppProject์ Identify์ ํ๋กํผํฐ๋ฅผ ๋ณด๋ฉด Build์ Version์ด ์๋ค. Build์ Version์ ์ฐจ์ด๋ ? Version Version์ ์ฌ๋์ด ์ฝ๊ธฐ ์ํ ๋ฆด๋ฆฌ์ค๋ฒ์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ํ๋ก์ ํธ ์์ฑ ํ Version์ ๋ํดํธ๊ฐ์ 1.0์ด๋ค. ๋ณดํต Version์ 10.14.1๊ณผ ๊ฐ์ด 1~3๊ฐ์ ์ ์์ ๋ง์นจํ๋ฅผ ๊ตฌ๋ถ์๋ก ์ด๋ค.๊ฐ ์ ์๋ [Major].[Minor].[Patch] ํ์์ผ๋ก ๋น๋ ๋ฒ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค. ์ฒซ๋ฒ์งธ ์๋ฆฌ์ 1์ ๋ฉ์ด์ ํ ์ ๋ฐ์ดํธ์ผ๋ ์ซ์๋ฅผ ์ฌ๋ฆฐ๋ค. ๋๋ฒ์งธ ์๋ฆฌ๋ ๊ธฐ๋ฅ ๋ฆฌ๋ด์ผ์ ๋์ ์ค๊ท๋ชจ ์ ๋ฐ์ดํธ๋ ์ซ์๋ฅผ ์ฌ๋ฆฐ๋ค. ์ธ๋ฒ์งธ ์๋ฆฌ๋ ์์ํ ๋๋ฒ๊น ๋ฐ ์ฝ๊ฐ์ ์์ ์ ์ ๋ฐ์ดํธํ ๋ ์ฌ๋ฆฐ๋ค. 3๊ฐ ์ด์์ ์ซ์๋ฅผ ์ฐ๋ฉด ์์คํ ์์ ์ด๋ฅผ ๋ฌด์ํ๋ค. ๋๊ฐ์ ์ ์๋ง..
(iOS) - Bundle : Build version์ Version์ ์ฐจ์ด์ ๊ฐ๋ AppProject์ Identify์ ํ๋กํผํฐ๋ฅผ ๋ณด๋ฉด Build์ Version์ด ์๋ค. Build์ Version์ ์ฐจ์ด๋ ? Version Version์ ์ฌ๋์ด ์ฝ๊ธฐ ์ํ ๋ฆด๋ฆฌ์ค๋ฒ์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ํ๋ก์ ํธ ์์ฑ ํ Version์ ๋ํดํธ๊ฐ์ 1.0์ด๋ค. ๋ณดํต Version์ 10.14.1๊ณผ ๊ฐ์ด 1~3๊ฐ์ ์ ์์ ๋ง์นจํ๋ฅผ ๊ตฌ๋ถ์๋ก ์ด๋ค.๊ฐ ์ ์๋ [Major].[Minor].[Patch] ํ์์ผ๋ก ๋น๋ ๋ฒ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค. ์ฒซ๋ฒ์งธ ์๋ฆฌ์ 1์ ๋ฉ์ด์ ํ ์ ๋ฐ์ดํธ์ผ๋ ์ซ์๋ฅผ ์ฌ๋ฆฐ๋ค. ๋๋ฒ์งธ ์๋ฆฌ๋ ๊ธฐ๋ฅ ๋ฆฌ๋ด์ผ์ ๋์ ์ค๊ท๋ชจ ์ ๋ฐ์ดํธ๋ ์ซ์๋ฅผ ์ฌ๋ฆฐ๋ค. ์ธ๋ฒ์งธ ์๋ฆฌ๋ ์์ํ ๋๋ฒ๊น ๋ฐ ์ฝ๊ฐ์ ์์ ์ ์ ๋ฐ์ดํธํ ๋ ์ฌ๋ฆฐ๋ค. 3๊ฐ ์ด์์ ์ซ์๋ฅผ ์ฐ๋ฉด ์์คํ ์์ ์ด๋ฅผ ๋ฌด์ํ๋ค. ๋๊ฐ์ ์ ์๋ง..
2021.09.08