SwiftUI에서 스피닝 프로그래스 뷰 만들기 회전하는 원 도형 만들기 적절한 길이의 원 도형을 생성한다. struct SpinningProgressView: View { var body: some View { Circle() .trim(from: 0.1, to: 0.9) .stroke(lineWidth: 10) } } 그라디언트를 추가하여 애니메이션 시 더욱 자연스러운 모습을 보이도록 바꿔준다. private let gradient = AngularGradient( //
SwiftUI에서 원형 프로그래스 뷰 만들기 원형 뷰 만들기 우선 원형 틀을 추가한다. struct CircleProgressView: View { var body: some View { Circle() .stroke(Color.red.opacity(0.5), lineWidth: 5) } } 그리고 실제 프로그래스를 나타낼 뷰를 ZStack으로 올린다. trim 모디파이어를 사용해 원을 잘라서 사용할 수 있다. ZStack { Circle() .stroke(Color.red.opacity(0.5), lineWidth: 5) Circle() .trim(from: 0, to: 0.25) //
UIView의 경우 익히 알려진 방법들로 스크린샷을 촬영할 수 있다. extension UIView { func snapshot() -> UIImage { let renderer = UIGraphicsImageRenderer(size: bounds.size) return renderer.image { context in drawHierarchy(in: bounds, afterScreenUpdates: true) } } } SwiftUI의 View 타입은 UIView와 다르게 업데이트 시마다 이니셜라이즈된다. 뷰의 렌더된 이미지나 속성을 가지지 않고 UIView를 업데이트해주는 빌더라고 할 수 있다. 그래서 스크린샷 등 렌더링된 이미지를 구하려면 UIKit의 도움을 받아야 한다. View 타입을 즉시 렌더..
SwiftUI에서 구글로그인 띄우기 구글 로그인은 API로 제공되며 UIKit 프레임워크에서 쉽게 작동시킬 수 있도록 설계되어 있다. 이제 SwiftUI가 점점 보편화 됨에 따라 API도 전환이 되겠지만 현재까지는 업데이트 되지 않은 상황이라 방법을 공유하고자 한다. 구글 로그인 화면 띄우기 구글 로그인은 로그인 뷰를 띄울 뷰 컨트롤러를 제공해주어야 한다. signIn(with: GIDConfiguration, presenting: UIViewController, callback: GIDSignInCallback?) 아무 뷰 컨트롤러나 제공한다고 해서 표시되는 것이 아니고 반드시 현재 화면에 띄워져 있어야 하고 다른 뷰 컨트롤러를 프레젠트 할 수 있어야 한다. 그렇기 때문에 SwiftUI와 같이 현재 뷰..
2022-04-13 Xcode 13.3 기준 URL Scheme 추가하기 프로젝트의 Info 수정하기 프로젝트를 생성하면 기존의 Info.plist가 기본적으로 표시되진 않는다. 이제 Xcode 프로젝트 파일에 일부 통합되어 관리된다. Xcode 프로젝트 > Targets (대상 앱) > Info Info 탭에서 URL Types를 하나 추가하게 되면 Info.plist 파일이 생성되는 모습을 볼 수 있다. URL Schemes에 원하는 Scheme을 입력해준다. 본문에선 마그넷 URI를 앱으로 연결하기 위해 magnet을 입력했다. URL 핸들링하기 기존에는 UIApplicationDelegate가 갖고 있던 application(_:open:options:) 델리게이트 메소드를 iOS 14+의 Swi..
SwiftUI에는 @State 값을 기반으로 뷰의 상태를 조절할 수 있다. 단순히 몇가지 값을 기반으로 표현하는 뷰의 경우 이 값 바인딩이 사용하기 편리하며 가독성을 높여준다. 그러나 Picker나 Toggle등의 값 변화에 동작을 추가하고 싶을 때는 번거로운 작업이 예상되는 경우가 많다. 이럴 땐 기존의 델리게이트 방식을 사용하는 것이 편리한 것 같다. 다행히 SwiftUI의 바인딩은 Get, Set 동작을 커스텀할 수 있도록 해준다. 이를 통해 애플이 제작한 바인딩 기반 뷰들이 방출하는 값을 관찰하거나 뷰가 표시될 시점을 조절할 수 있다. 바인딩 Get 커스텀하기 Bool 바인딩 기반 뷰를 표시하고 싶지만 State가 Bool이 아닐 때 struct ContentView: View { @State p..
