728x90 ๋ฐ์ํ ๐ iOS138 [iOS/UI] ํน์ ๋ถ๋ถ๋ง ํฌ๋ช ํ๊ฒ ๋ง๋ค๊ธฐ (feat. fillRule, evenOdd) ์๋ ํ์ธ์ Foma ์ ๋๋ค! ์ค๋์ ํ๋ก์ ํธ ์งํ ์ค์ ํน์ ๋ถ๋ถ๋ง ํฌ๋ช ํ๊ฒ ํด์ ๊ทธ ๋ถ๋ถ๋ง ๋ณด์ด๊ฒ ํ๋ ๊ธฐ๋ฅ์ ๋ง๋๋ ๋ฒ์ ๋ํด ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ Preview Add a label ๋ฐฐ๊ฒฝ์ ๋ ์ด๋ธ์ ํ๋ ๋ฃ์ด ํฌ๋ช ํ์ง ์๋์ง ํ์ธํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด ์ฃผ๊ฒ ์ต๋๋ค. let label = UILabel(frame: CGRect(x: view.center.x - 100, y: view.center.y - 100, width: 200, height: 200)) label.backgroundColor = .systemBlue label.textColor = .white label.font = UIFont.boldSystemFont(ofSize: 20) label.text = "Fomagran".. 2022. 7. 31. [WWDC 2022] Swift๋ก ํ๋กํ ์ฝ ์ธํฐํ์ด์ค ์ค๊ณํ๊ธฐ (Design protocol interface in Swift) ์๋ ํ์ธ์ Foma ์ ๋๋ค! ์ค๋์ ์ ๋ฒ ๊ธ์ธ Embrace Swift Generics์์ ๊ณ์ ์ธ๊ธํ๋ Design protocol interface in Swift ์ธ์ ์ ๋ํด์ ๋ค๋ค๋ณด๋ ค๊ณ ํฉ๋๋ค! (์ ๋ฒ ๊ธ๊ณผ ๋ง์ด ์ฐ๊ด๋์ด ์์ผ๋ ์๋ณด์ ๋ถ๋ค์ ๊ผญ ์ฌ๊ธฐ ์์ ๋ณด๊ณ ์์ฃผ์ธ์!) ๋ฐ๋ก ์์ํ ๊ฒ์~ Understand type erasure ๊ฐ์ฅ ๋จผ์ ํ์ ์ด๋ ์ด์ ธ์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. (erasure๋ฅผ ์ ํํ ์ด๋ป๊ฒ ํด์ํด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค์.. ์ญ์ ? ์ง์?) ๊ฐ์ฅ ๋จผ์ ๋๋ฌผ ํ๋กํ ์ฝ์ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋๋ฌผ ํ๋กํ ์ฝ์ associatedtype์ผ๋ก ๋จน์ดํ์ ๊ณผ ์์ฐํํ์ ์ด ์๊ณ , ๋ฉ์๋๋ก ๋จน์ดํ์ ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ eat, ์์ฐํ ํ์ ์ ๋ฐํํ๋ produce ๋ฉ์๋๊ฐ ์์ต๋๋ค. pro.. 2022. 7. 11. [WWDC 2022] ์ ๋๋ฆญ๊ณผ ํ๋กํ ์ฝ์ ์ฌ์ฉํด ์ฝ๋ ์ถ์ํํ๊ธฐ (feat. some,any) (Embrace Swift generics) ์๋ ํ์ธ์ Foma ์ ๋๋ค! ์ค๋์ WWDC 2022์์ ์ ๋๋ฆญ๊ณผ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ ์(?)์ผ๋ก ์ฝ๋๋ฅผ ์ถ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃฌ Embrace Swift generics ์ธ์ ์ ๋ํด ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ (์ ๋ฐฉ์๋๋ก ํด์ํ์ฌ ์ ๋ฆฌํ๋ ๊ฒ์ด๋ ํ๋ฆฐ ์ ์ด๋ ๊ถ๊ธํ ์ ์ด ์๋ค๋ฉด ์ธ์ ๋ ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!) Model with concrete types ๊ฐ์ฅ ๋จผ์ ์ด๋ ํ ๊ฒ๋ ์ถ์ํ๋ ์ ๋๋ฆญ์ ์ฌ์ฉํ์ง ์๊ณ ์๋ ๊ทธ๋๋ก ์ฆ, ๊ตฌ์ฒด์ ์ธ ํ์ ์ ์ด์ฉํด์ ๋์ฅ ์์คํ ์ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค. ๋์ฅ์ ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ณ , ๊ทธ ์๋ ๊ฑด์ด(Hay)๋ฅผ ๋จน๋ struct๋ฅผ ์์ฑํด ์ฃผ๊ฒ ์ต๋๋ค. struct Cow { func eat(_ food:Hay) {...} } ์ด์ ์๊ฐ ๋จน๋ ๊ฑด์ด๋ ์๋ผ๋ฉด ์.. 2022. 7. 10. [WWDC 2022] ๊ธฐ์กด UIKit ์ฑ์ SwiftUI ์ ์ฉํ๊ธฐ (Use SwiftUI with UIKit) ์๋ ํ์ธ์ Foma ์ ๋๋ค! ์์ ๋ถํฐ WWDC ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์ถ์๋๋ฐ ๋๋์ด ์ค๋ WWDC์ ๋ํด ๊ธ์ ์์ฑํ๊ฒ ๋๋ค์. WWDC 2022์์ ๊ฐ์ฅ ๊ด์ฌ์ ๋์๋ ์ธ์ ์ UIKit ์ฑ์ SwiftUI๋ฅผ ์ ์ฉํ๋ ์ธ์ ์ด์๋๋ฐ์. ํด๋น ์ธ์ ์ ์ง์ ๊ตฌํํด ๋ณด๊ณ ์ ๋ฆฌํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ (Xcode 14 Beta๋ก ์งํ๋๊ธฐ ๋๋ฌธ์ ํน์ ๋ฏธ๋ฆฌ ๊ฒฝํํ๊ณ ์ถ์ ๋ถ๋ค์ ์ฌ๊ธฐ ์์ ๋ค์ด๋ก๋ ๋ฐ์์ ์งํํด ์ฃผ์ธ์~) Preview UIHostingController UIHostingController๋ SwiftUI ๋ทฐ๋ฅผ ํฌํจํ UIViewController์ ๋๋ค. UIHostingController๋ฅผ ์ด์ฉํ์ฌ UIViewController์์ SwiftUI ๋ทฐ๋ฅผ ํ์ ํ์์ผ๋ก ๋์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.. 2022. 7. 9. [iOS/UI] UIBezierPath ์ฝ๊ฒ ์ฌ์ฉํ๊ธฐ (feat. EasierPath) ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค! ์ค๋์ ์ง์ ์ํ๋ ๋ชจ์์ ๊ทธ๋ฆด ์ ์๋ UIBezierPath๋ฅผ ๋์ฑ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ EasierPath์ ๋ํด์ ์์ ๋ณด๊ฒ ์ต๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~! UIBezierPath ํ์์ ์ํ๋ ๋ชจ์์ ์ง์ ์ปค์คํ ํด์ ๊ทธ๋ฆด ๋ UIBezierPath๋ฅผ ์์ฃผ ์ฌ์ฉ ํ์๋๋ฐ์. ๋จผ์ UIBezierPath๋ฅผ ์ด์ฉํด์ ํญ์๋ฆฌ ๋ชจ์์ ๊ทธ๋ฆฌ๋ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. 1. UIBezierPath ์ธ์คํด์ค๋ฅผ ์์ฑํด ๊ทธ๋ ค์ค๋ค. let bezierPath:UIBezierPath = UIBezierPath() bezierPath.move(to: CGPoint(x: 100, y: 100)) bezierPath.addLine(to: CGPoint(x: 200, y: 100)) bezier.. 2022. 5. 30. [iOS/UI] UIBezierPath ์์ Gradient ์ปฌ๋ฌ๋ก ์ฑ์ฐ๊ธฐ (Fill a UIBezierPath with Gradient Color) ์๋ ํ์ธ์ Foma๐ป ์ ๋๋ค! ์ค๋์ UIBezierPath ์์ Gradient ์ปฌ๋ฌ๋ก ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ TestView ๋ทฐ๋ฅผ ์๋์ ๊ฐ์ด ์ด๊ธฐํ ํด์ค๋๋ค. class TestView: UIView { override init(frame: CGRect) { super.init(frame: frame) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func draw(_ rect: CGRect) { } } UIBezierPath ์ด์ UIBezierPath๋ฅผ draw ๋ฉ์๋ ์์ ๊ทธ๋ ค๋ณด๊ฒ ์ต๋๋ค. ํ์ํ ๊ฒฝ๋ก๋ฅผ ์๋์ ๊ฐ์ด ์์ฑํด ์ค๋๋ค.. 2022. 5. 2. [SwiftUI] GeometryReader๋? (feat. GeometryProxy,CoordinateSpace) ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค! ์ค๋์ SwitUI๋ฅผ ์ด์ฉํด์ Layout์ ์ก์ ๋ ์์ฃผ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ GeometryReader์ ๋ํด์ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ GeometryReader๋? ์ด๋ฆ์ ์ง์ญํ๋ฉด Geometry๋ ๊ธฐํํ์ ๋ํ๋ด๋๊น, ๊ธฐํํ์ ์ธ ๋ฌด์ธ๊ฐ๋ฅผ ์ฝ๋ ๊ฒ์ด๋ผ๊ณ ํด์ํ ์ ์๋๋ฐ์. ๊ณต์ ๋ฌธ์์๋ ์ด๋ฆ์ ์ง์ญํ ๊ฒ๊ณผ ๋น์ทํ๊ฒ "์ปจํ ์ธ ์ ํฌ๊ธฐ์ ์์น๋ฅผ ํจ์๋ก ๋ํ๋ด๋ ์ปจํ ์ด๋ ๋ทฐ์ผ!" ๋ผ๊ณ ์๊ฐํฉ๋๋ค. GeometryReader๋ฅผ ์ด๊ธฐํ ํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ด ์ปจํ ์ธ ๋ฅผ ๋ง๋๋๋ฐ GeometryProxy๋ฅผ ์ด์ฉํด์ ๋ง๋ญ๋๋ค. GeometryProxy๋? ๊ทธ๋ ๋ค๋ฉด GeometryProxy๋ ๋ฌด์์ผ๊น์? ์ฐ์ Proxy์ ๋ป์ ๋ฌด์์ธ๊ฐ๋ฅผ ๋์ ํ๋ค๋ ์๋ฏธ๋ฅผ ๋ํ๋ ๋๋ค. .. 2022. 4. 4. [SwiftUI] ์์ฐ์ค๋ฌ์ด ํ๋ฉด์ ํ ์ ๋๋ฉ์ด์ ๊ตฌํํ๊ธฐ (feat. matchedGeometryEffect,Namespace) ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค! ํ์์ AppStore๋ฅผ ๋ณด๋ฉด ํ๋ฉด ๊ฐ ์ ํํ ๋ ์์ฐ์ค๋ฌ์ด ์ ๋๋ฉ์ด์ ์ด ๋ง์ด ๋ณด์๋๋ฐ, '์ด๊ฑด ์ด๋ป๊ฒ ๊ตฌํํ์๊น' ๋ผ๋ ์๊ฐ์ด ๋ง์ด ๋ค์ด ๊ธ์ ์ ๋ฆฌํ๊ฒ ๋์์ต๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ Preview @Namespace ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ ๊ตฌํํ๊ธฐ ์ํด์ @Namespace ํ๋กํผํฐ ๋ํผ๊ฐ ํ์ํฉ๋๋ค. @Namespace๋ ๊ณต์ ๋ฌธ์์ ์๋์ ๊ฐ์ด ์๊ฐํฉ๋๋ค. ์์ฑ์ ํฌํจํ๋ ๊ฐ์ฒด(์: view)์ ์๊ตฌ ID๋ก ์ ์๋ ๋ค์์คํ์ด์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ํ์ฉํ๋ ๋์ ์์ฑ ์ ํ์ ๋๋ค. ๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ID์ ํจ๊ป ๊ธฐ์ตํ๊ณ ์๋ ๋ํผ์ ๋๋ค. ์ด ID๋ฅผ ํตํด์ ์ ๋ณด๋ฅผ ๋ค๋ฅธ ๋ทฐ์ ๊ณต์ ํ ์ ์์ผ๋ฉฐ, ์ด๊ฒ์ ํตํด ์ง์ค๋ฉํธ๋ฆฌ ์ ๋๋ฉ์ด์ ์ด ๊ฐ๋ฅํด ์ง๋๋ค. ์ ์ธํ๋ ๋ฐฉ์์ ์.. 2022. 3. 28. [iOS/UI] UIBezierPath์ ๊ฑฐ์ ๋ชจ๋ ๊ฒ (feat. ๋ชจ์,๊ณก์ ,์ง์ ๊ทธ๋ฆฌ๊ธฐ) ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค! ์ค๋์ ์ํ๋ ๋ชจ์์ ์ง์ ๊ทธ๋ฆด ์ ์๋ UIBezierPath์ ๋ํด์ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. ์์ ๋ถํฐ ๋ค๋ฃจ๊ณ ์ถ์ ์ฃผ์ ์๋๋ฐ ๋๋์ด ์ ๋ฆฌํ๊ฒ ๋๋ค์..! ๋ฐ๋ก ์์ํ ๊ฒ์~ UIBezierPath๋? UIBezierPath๋ UIKit์์ ๊ทธ๋ฆฌ๊ธฐ(Drawing)์ ์ํด์๋ ํด๋์ค์ ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ด๋ค ๊ฒ์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ๊ธฐ๋ฅ๋ค์ด ์ํด์๊ฒ ์ฃ ? ์ ํ ๊ณต์ ๋ฌธ์์๋ ์๋์ ๊ฐ์ด ์ ์ํ๊ณ ์์ต๋๋ค. A path that consists of straight and curved line segments that you can render in your custom views. ํด์ํ๋ฉด view์์ ๋ ๋๋ง ํ ์ ์๋ ์ง์ ๊ณผ ๊ณก์ ์ผ๋ก ๊ตฌ์ฑ๋ ๊ฒฝ๋ก๋ผ๊ณ ํ๋ค์. Initializer Bez.. 2022. 3. 21. [iOS/UI] CALayer๋? (feat. ์ ๋๋ฉ์ด์ ์๋ฆฌ) ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค! ์ ๋ฒ ์๊ฐ์ Core Animation์ ๋ํ ๊ธ์ ์์ฑํ๋๋ฐ์. Core Animation์ ๊ณต๋ถํ๋ค ๋ณด๋ Layer๊ฐ ๊ฑฐ์ ์ ๋ถ๋ผ๊ณ ํด๋ ๋๊ฒ ๋๋ผ๊ตฌ์.. ๊ทธ๋์ ๋ฐ๋ก Layer์ ๋ํด ์ ๋ฆฌํ๋ ๊ธ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค. (ํน์ Core Animation์ ๋ํด ์ ๋ชจ๋ฅด์๋ ๋ถ๋ค์ผ ์ฌ๊ธฐ ์์ ํ์ธํด์ฃผ์ธ์!) ๋ฐ๋ก ์์ํ ๊ฒ์~ CALayer๋? Layer์ ์ฌ์ ์ ์๋ฏธ๋ ๊ฒน,๋ง,์ธต,๋จ๊ณ๋ฅผ ๋ปํฉ๋๋ค. ์ฌ์ ์ ์๋ฏธ์ ๊ฐ์ด iOS์์๋ ์๋์ ๊ฐ์ด ๊ณ์ธต์ผ๋ก ์ฌ์ฉ๋๋ ๋๋๋ฐ์. ์ ํํ๊ฒ๋ ์ด๋ฏธ์ง ๊ธฐ๋ฐ ์ปจํ ์ธ ๋ฅผ ๊ด๋ฆฌํ๊ณ ํด๋น ์ปจํ ์ธ ์์ ์ ๋๋ฉ์ด์ ์ ์ํํ ์ ์๋๋ก ํ๋ ๊ฐ์ฒด์ ๋๋ค. ์ฆ, ๋ฐฐ๊ฒฝ์,ํ ๋๋ฆฌ ๋ฐ ๊ทธ๋ฆผ์์ ๊ฐ์ด ์ค์ ํ ์ ์๋ ํ๋ฉด์ ํ์ํ ์ ์๋ ์๊ฐ์ ์์ฑ์ ๊ด๋ฆฌํ๋.. 2022. 3. 17. [iOS/UI] Core Animation์ด๋? (feat. CALayer) ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค! ์ค๋์ ์ ๋๋ฉ์ด์ ์ด ์๋๋๋ ์๋ฆฌ์ ๋ํด ๋ ๊น๊ฒ ์ดํดํ๊ธฐ ์ํด์ iOS์์ ์ ๋๋ฉ์ด์ ์์คํ ์ ๋ด๋นํ๋ Core Animation์ ๋ํด์ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ Core Animation์ด๋? ๋ทฐ ๋ฐ ๊ธฐํ ์๊ฐ์ ์์์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ๊ธฐ ์ํ ๋ฒ์ฉ ์์คํ ๊ทธ๋ํฝ ๋ ๋๋ง ๋ฐ ์ ๋๋ฉ์ด์ ์ธํ๋ผ ๋ทฐ์ ํตํฉ๋์ด ์ฝํ ์ธ ์ ๋๋ฉ์ด์ ์ ์ํ ๋ ๋์ ์ฑ๋ฅ๊ณผ ์ง์์ ์ ๊ณตํ๋ ๊ธฐ์ ์๋์ ๊ฐ์ด UIKit ๋ฐ AppKit์ ๊ทผ๊ฐ์ด ๋๋ ๊ธฐ์ ๋ก iOS ๋ฐ OS X๋ฅผ ์ฑ์ ๊ฐ๋ฐํ๊ณ ์๋ค๋ฉด ๋ฌด์กฐ๊ฑด Core Animation์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. Core Animation์ ์ง์ ์ฌ์ฉํ ํ์๋ ์์ง๋ง ์ฌ์ฉํ ๋ Core Animation์ด ์ด๋ ํ ์๋ฆฌ๋ก ์ํ๋๋์ง ์ดํดํ ํ์.. 2022. 3. 16. [SwiftUI] TabView์ ๋ํด ์์๋ณด๊ธฐ (feat. UITabBar) ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค! ์ค๋์ SwiftUI์์ ํญ๋ทฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. (UIKit์์ UITabBar๋ฅผ ๋ปํฉ๋๋ค.) ๋ฐ๋ก ์์ํ ๊ฒ์~ TabView Contents SwiftUI์์ ํญ๋ทฐ๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ฌด ๋๋ฌด ๊ฐ๋จํฉ๋๋ค. ์๋์ ๊ฐ์ด TabView๋ก ๊ฐ์ธ๊ณ ํญ๋ทฐ ์์ ๋ค์ด๊ฐ ๋ทฐ๋ค์ ๋ฃ์ผ๋ฉด ๋ฉ๋๋ค. TabView { View1() View2() View3() ... } TabView Item ํ์ง๋ง ์๋์ ๊ฐ์ด ์ค์ ํ๋ฉด ์์ง ํญ๋ทฐ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋๋ฐ์. TabView { LoginView() HelloView() SettingView() } ์ด์ ๋ ์ด๋ฏธ ํญ๋ทฐ๊ฐ ์กด์ฌํ์ง๋ง ํญ๋ทฐ๋ฅผ ๋ํ๋ด๋ ์์ดํ ์ ์ธํ ํด์ฃผ์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ณ ๋ก ๋ค์๊ณผ ๊ฐ์ด ํญ์์ดํ .. 2022. 3. 10. ์ด์ 1 2 3 4 ยทยทยท 12 ๋ค์ 728x90 ๋ฐ์ํ