전체 글 83

[SwiftUI] Invalid frame dimension (negative or non-finite) 오류

[머릿말]뷰에서 사각형을 화면에 꽉 차게 만들고자 .frame(width: .infinity) 수정자를 사용했다. 코드를 작성할 땐 보이지 않던 Warning이 시뮬레이터를 실행하니 나타났다. 색깔도 노란색이 아닌 보라색으로 말이다.1. Invalid frame dimension (negative or non-finite) 오류란?"유효하지 않은 크기 (음수 또는 비정형)" 이 오류는 뷰의 크기가 유효하지 않을 때(음수이거나 비정형인 경우) 발생한다. frame에 음수 값을 넣는 경우는 거의 없기에 아마 대부분은 .infinity 값을 사용하고 이 오류를 접하게 되었을 것이다. 2. 오류 발생 원인위와 같은 코드를 작성할 때의 생각은 다음과 같았을 것이다."이 뷰의 크기는 부모 뷰의 남은 공간 전체가 되..

[SwiftUI] Custom Font 적용하는 방법

[머릿말]Figma에서 사용한 폰트를 Xcode에서 사용하려고 보니 없..다..그러나 안드로이드에서 그랬던 것처럼 iOS에도 당연히 커스텀 폰트를 적용하는 방법이 있다!1. 원하는 Font 구하기우선 사용할 폰트 파일을 구해야 한다. 가장 많이 사용하는 Google Fonts에서 원하는 폰트를 하나 다운받아보자. 나는 Figma에서 사용했던 Black Han Sans 폰트를 다운받았다. 2. 폰트 파일을 Xcode의 원하는 폴더로 드래그다운받은 폰트 파일을 드래그하여 Xcode의 원하는 폴더로 드래그하여 넣어준다. 뜨는 화면에서 파일을 복사할 것인지, 이동할 것인지 선택하면 된다. 3. 프로젝트 선택 -> Info에서 `Fonts provided by application` 추가Xcode 좌측 네비게이터..

[SwiftUI] Picker, pickerStyle - 여러가지 중 하나를 선택

[머릿말]iOS 프로젝트를 진행하면서 그동안 아이폰을 사용하면서 봤던 것들을 하나씩 접하게 되는데, 보물을 찾는 것처럼 재밌고 신기하다. 이번에 찾은 것은 여러가지 중 하나를 선택할 때 사용하는 Picker이다.1. Picker란?공식 문서에서의 내용은 다음과 같다."상호배타적인 값 집합에서 선택하기 위한 컨트롤" 여러 값에서 하나를 선택할 때 사용하는 것이라고 보면 되는데 아래 사진에 있는 것들이 모두 Picker이다. 2. 사용 방법2-1. Picker(_ titleKey:selection:content:) - 값의 집합을 만들지 않고 사용titleKey : Picker 제목selection : 선택된 값(Binding)content : Picker 구성 내용selection에는 각 아이템의 tag로..

[Swift] ~= 연산자 : 범위 확인 연산자, 패턴 매치 연산자

[머릿말]프로그래머스에서 문제를 풀고 다른 사람의 풀이를 보던 중 새로운 연산자를 보게 되었다. 파이썬에서 바다 코끼리 연산자(:=)를 처음 보았을 때 느꼈던 기분이었다😀1. ~=(_:_:) 연산자  [범위 확인 연산자]공식 문서에서의 내용은 다음과 같다."값이 범위에 포함되는지를 나타내는 Boolean 타입 값을 반환한다." 범위에 값이 포함되어 있는지, 즉 contains 메서드와 같은 기능을 하는 연산자라고 보면 된다. 사용 방법은 아래 예제와 같다.print(1...10 ~= 5) // trueprint(1...10 ~= 11) // falseif 1..value가 pattern에 포함되면 true, 그렇지 않으면 false가 반환된다.  2. ~=(_:_:) 연산자  [패턴 매치 연산자]이 ..

[SwiftUI] Launch Screen(Splash Screen) 구현하는 2가지 방법

[머릿말]앱이 실행되면 처음에 보이는 화면이 있다. 이 화면을 Android에서는 Splash Screen이라 부르고 iOS에서는 Launch Screen이라 부른다. 이를 구현하는 방법을 2가지 찾았는데 이에 대해 정리하고자 한다.1. Launch Screen이란?이는 앱이 처음에 실행될 때 짧게 보였다가 사라지는 화면을 말한다. 2. 구현 방법2-1. Info.plist 파일 사용첫 번째 방법은 Info.plist 파일에 내용을 추가하는 것이다. 이를 위해 먼저 Assets.xcassets 파일에 사용할 Image Set을 추가해줘야 한다. 테스트 앱 아이콘으로 사용하려고 만든 이미지를 사용해서 Image Set을 추가해보았다. 이름은 LaunchImage로 하였다.  다음으로 왼쪽의 프로젝트 구조에..

[SwiftUI] 원하는 색상(color) 정의하여 사용하는 방법

[머릿말]예전에 안드로이드 앱을 개발했을 때의 기억으로는 colors.xml 파일에 원하는 색상을 따로 정의하여 사용했던 것 같다. iOS 역시도 색상을 정의하여 사용하는 방법이 있을 것이라 생각하고 내용을 찾아보았고 2가지 방법을 정리하고자 한다.1. Assets.xcassets 파일에서 New Color Set첫 번째 방법은 Xcode 프로젝트를 생성하면 자동으로 만들어지는 Assets.xcassets 파일에서 Color Set을 추가하는 것이다.  위 두 방법 중 한 가지를 선택하여 해보면 Color 라는 이름의 항목이 추가된다. 이 항목의 이름이 색상에 붙일 이름이 되는 것인데 이를 MyColor로 설정해보겠다.  Any Appearance를 선택하고 Xcode의 우측 상단 버튼을 눌러 Inspe..

[SwiftUI] 앱 아이콘(Icon) 설정 방법

1. Assets.xcassets 파일프로젝트를 생성하면 자동으로 생성되는 파일인 Assets.scassets 파일을 Xcode에서 열어보면 다음 화면을 볼 수 있다.이 프로젝트는 Multiplatform App을 선택하고 생성한 프로젝트이기에 위와 같은 화면이 보이게 된다. 여기서 가장 큰 이미지 크기는 1024x1024px이므로 이 크기의 이미지 1장을 준비해야 한다.  2. 여러 규격의 사진을 자동으로 만들어주는 사이트다양한 규격의 사진을 하나하나 편집하는 것은 여간 귀찮은 일이다. 그러나 아래 사이트에서 이 일을 쉽게 할 수 있다. App Icon Generator www.appicon.co 2-1. 1024x1024px 크기의 사진 업로드앱 아이콘으로 사용할 이미지를 업로드하고, 사용할 운영체제..

[SwiftUI] TabView란? 사용 예시, 배경색 및 아이템 색 변경 등

[머릿말]현재 진행 중인 프로젝트에 TabView를 사용하게 되었다. 사실상 요즘 거의 모든 앱에서 탭뷰를 사용하고 있는 것 같다. 각각의 탭을 구성하는 방법, 선택된 탭의 색과 선택되지 않은 탭의 색을 변경하는 방법, TabBar의 색상을 변경하는 방법을 정리하고자 한다.1. TabView 란?현재 핸드폰에 있는 앱을 아무거나 켜보더라도 거의 대부분 이 TabView를 사용하고 있을 것이다. 카카오톡, 네이버 지도, 토스 등의 앱에서 TabView를 사용하고 있음을 확인할 수 있다.공식 문서에서의 내용은 다음과 같다. "대화형 사용자 인터페이스 요소들을 사용하여 여러 자식 뷰들 사이를 전환하는 뷰" 기존의 TabView를 구현할 때는 .tabItem(_:)를 사용하여 구현했었지만 이건 이제 depre..

[SwiftUI] Deprecated 되어버린 cornerRadius를 대체할 방법

[머릿말]테두리를 부드럽게 설정할 수 있는 메서드, cornerRadius는 iOS 18.1부터 deprecated 되었다... 왜 deprecated 되었을까관련해서 StackOverflow를 보면 아쉬워하는 사람이 꽤나 존재한다.그렇지만, 이제는 deprecated 되버렸으니 다른 방법을 사용해야 한다!⦿ cornerRadius 란?공식 문서에서의 내용은 다음과 같다."명시된 corner radius값으로 뷰의 경계를 자른다."iOS 13.0부터 오랫동안 사용된 메서드인데 곳곳에서 deprecated 되었다고 알려주고 있다...🤣 그래도 어떻게 사용하는 것인지는 한번 살펴보도록 하자!import SwiftUIstruct ContentView: View { var body: some Vi..

[SwiftUI] @SceneStorage(화면 저장소) vs @AppStorage(앱 저장소)

[머릿말]앱에서 필요한 데이터를 저장하기 위해 사용하는 두 개념에 대해 접하게 되었다. 데이터를 저장하는 일은 필수적이므로 자주 찾아보게 될 것 같아 글로 남겨놓고자 한다.@SceneStorage와 @AppStorage는 모두 프로퍼티 래퍼(Property wrapper)다. 이는 SwiftUI가 데이터를 저장할 목적으로 제공한다. 저장할 데이터에 대한 String 타입의 key 값을 통해 데이터를 구분짓는다. 우리가 사용하는 앱은 종료되더라도 데이터는 보존된다. 이는 두 프로퍼티 래퍼를 사용하여 구현해볼 수 있다. ⦿ 두 프로퍼티 래퍼를 사용하지 않았을 때는?두 프로퍼티 래퍼를 사용하지 않은 경우, 앱이 종료되면 데이터는 그 즉시 소멸된다. 간단하게 회원가입 화면을 통해 확인해보자. 아래 코드는 Sce..