본문 바로가기

SwiftUI5

MacOS app개발 시 custom font 추가하기 iOS에서 하는 방식과 동일하게 하였는데도 custom font를 인식하지 못하는 현상이 있어 한참을 헤매고 있었는데, 다행히 SOF에 동일한 문제에 대한 해결 방법이 나와있어 도움을 받았습니다. 다른 방식은 iOS에서 custom font를 추가하는 것과 동일하고, 원하는 타겟의 info.plist에 아래의 key, value를 추가해주면 됩니다. 이 key의 값으로 설정된 path에서도 font를 찾는다고 합니다. 이걸 따로 설정해줘야 한다는 건, MacOS에서 기본적으로 읽는 font 경로와 제가 추가한 font의 경로가 달라서 그렇다는 얘기일텐데.. 왜 iOS랑은 다르게 되어 있는 지 궁금하긴 합니다만 정확한 이유는 모르겠습니다.  혹시나 저와 비슷한 현상이 있으신 분들께 도움이 되면 좋겠습니다... 2025. 1. 6.
SwiftUI Segment Picker의 round 유지하며 background color 변경하기 SwiftUI의 Picker view의 `pickerStyle`을 .segmented로 설정해주면, UIKit의 `Uisegmentedcontrol`과 같은 모양의 UI를 사용할 수 있습니다.   기본적으로 배경색이 회색이고 round된 corner를 가진 모양입니다. 배경색상을 변경할 필요가 있었고, `background`를 설정해주면 될 것 같아 적용해 보았습니다. struct SegmentedView: View { @Binding var element: PickerElement var body: some View { Picker(selection: $element) { ForEach(PickerElement.allCases) { .. 2024. 11. 18.
mac app window background color 알파값 변경하기 꼭 만들어서 사용하고 싶은 mac app이 생겨서 재미로 mac app 개발을 시작했습니다. 시간 날때 틈틈이 개발해서 빨리 제가 사용하고 싶습니다 🫡 화면 element 자체는 많지 않고 디테일한 UI 작업은 필요없는 앱이라 속도감을 위해서 SwiftUI로 진행하게 되었습니다. iOS 앱을 만들 때는 Window 자체를 투명하게 만들어 본 적이 없었는데, mac 앱 작업 중에 window를 투명하게 만들어 볼 일이 생겼습니다. 아래 처럼 TransparentWindowView를 만들고 SwiftUI에서 사용할 수 있도록 NSViewRepresentable struct를 만들어 준 다음, body View의 background로 설정해주는 방식이었습니다. class TransparentWindowView.. 2024. 2. 3.
ActivityKit으로 Dynamic Island 만들어보기! 1. Widget Extension 추가하기 1) App project를 생성해 준 다음, File -> New -> Target 선택. 2) widget extension을 검색해서 타겟을 추가해준다. 3) Info.plist에 Supports Live Activities를 추가하고 YES로 value를 설정해준다. 주의: SwiftUI 프로젝트에는 navigation panel에 info.plist가 안보이므로, Targets에 들어가서 수정해주면 된다. 2. ActivityAttributes 모델 생성 1. Swift 파일로 ActivityAttributes를 conform하는 struct를 하나 만들어 준다. 주의: ActivityAttributes는 Target Membership에 앱과 위젯 .. 2023. 10. 21.
Property Wrapper 알아보기 @가 붙어있는 애노테이션을 Swift에서는 Property Wrapper라고 부릅니다. Property wrapper 변수에 접근하는 방법은 세 가지가 있는데, 각각의 차이점에 대해서 알아보려고 합니다. 예를 들어서, myName이라는 변수에 @Binding Property wrapper를 붙여주겠습니다. @Binding var myName: String 이제 myName이라는 변수에 접근할 때, 1. self.myName 2. self._myName (wrapped value) 3. self.$myName (projected value) 이렇게 세 가지 방식으로 접근이 가능합니다. 첫번째 방식은, Binding 자체에 접근할 수 있게 해줍니다. @Binding은 structure형태 입니다. 그렇기 때.. 2023. 10. 3.
반응형