iOS

iOS/SwiftUI

[SwiftUI] 버튼 사이즈 유지한 채로 터치 영역만 넓히기

앱 개발을 하다보면 버튼의 크기가 너무 작아서 터치가 잘 안되는데 디자인 상 크기를 키울 수 없는 경우가 있다. 이럴 때 화면 상 보이는 버튼 크기는 유지한 채로 터치 영역을 넓히는 법을 알아보자! 터치 영역이 너무 작은 버튼 문제 상황일부러 사이즈가 작은 버튼을 가져와서 버튼의 사이즈를 알 수 있도록 배경색을 노랑색으로 넣어놓았다. 손으로 터치를 하는 앱 특성상 이런 버튼은 터치가 힘들 것이다. Button { } label: { Image(systemName: "ellipsis") .resizable() .scaledToFit() .frame(width: 30)}.background(.yellow) 방법 1) .contentShape() 사용이미지에 `padding(..

iOS/SwiftUI

[SwiftUI] NavigationStack과 NavigationPath로 화면 스택 관리하기

SwiftUI의 화면 전환은 sheet, popover, NavigationLink, navigationDestination 등 여러 가지 방식이 있지만오늘은 iOS 16.0 부터 가능한 `NavigationStack`을 `NavigationPath`와 함께 사용해보려고 한다. 앱에서 화면 전환을 할 때, 계속 다음 화면으로 갈 수도 있지만 3개 전 화면으로 이동하거나 초기 화면으로 이동하는 등 화면이 쌓이는 순서를 관리해야할 필요가 있다. 그 방법 중 나는 `NavigationPath`를 선택했다. 이번 글에서는 개념적인 내용은 빼고 사용법만 간단히 작성하려고 한다. 구현하기 먼저 2개의 뷰 화면 `ContentView`, `SecondPage`와 네비게이션 관리를 위한 `NaviManager..

iOS

[iOS] Thread와 GCD(Grand Central Dispatch) 기본

iOS의 ThreadiOS의 Thread는 두 종류가 있다. Main Thread와 Global Thread (= Background Thread) Main Thread iOS에서 Main Thread는 사용자와 상호작용하는 모든 것을 처리하는 역할을 한다. 터치 이벤트, 제스처, UI 업데이트 등 UI와 관련된 모든 작업들은 Main Thread에서 처리되어야 한다.  기본으로 작성하는 코드들은 모두 Main Thread에서 동작하게 되고,시간이 걸리는 작업들을 Main Thread에서 실행하게 된다면 실제 앱에서는 버퍼링이 걸린 것처럼 느려지게 될 것이다.  그런 작업들은 Main Thread가 아닌 Global Thread에서 실행하여 백그라운드에서 작업을 처리하도록 하는 것이 좋다.  Global..

iOS

동기(Sync)와 비동기(Async)에 대한 이해

프로그래밍을 공부하면서 '비동기 처리'라는 말을 굉장히 많이 듣게 된다. 그렇다면 비동기란 뭘까 ??  Thread와 Task 동기와 비동기의 개념을 이해하기 위해 스레드와 테스크에 대해 아주 간단히만 설명하자면, 테스크(Task)는 우리가 요청한 작업이고 스레드(Thread)는 테스크를 하는 아이이다. 스레드가 1개라면 작업을 할 수 있는 사람이 한 명이지만 스레드가 여러 개라면 작업을 할 수 있는 사람이 여러 명인 것과 같다.  동시성이 필요한 이유우리가 요청한 작업은 아래 그림과 같이 하나의 스레드에서 순차적으로 작업이 이뤄진다. 요청한 작업을 처리하는데 걸리는 시간이 얼마 걸리지 않는다면 순차적으로 처리해도 문제가 되지 않는다.  만약 작업을 처리하는데 걸리는 시간이 길어진다면 어떨까?? 4번 작..

iOS/SwiftUI

[SwiftUI] 위도 경도 좌표로 경로선 그리기 (Canvas & Path)

오늘은 위도 경도 값을 가지고 경로선을 그려볼 것이다.  다른 지도 API는 어떤지 모르겠지만, 내가 사용해본 네이버 지도 API는 경로선 그리는 기능을 제공한다. 하지만 지도 위에 그리는 것이 아니라 경로선만 필요한 경우 직접 그려줘야 한다. 이 작업은 `Canvas`와 `Path`를 이용하려고 한다.   Canvas란?Canvas는 SwiftUI에서 제공하는 뷰로, 벡터 기반의 그래픽 작업을 간단하게 구현할 수 있도록 설계되었다.   Canvas 기본 구조 - context: 그리기 컨텍스트로, `stroke`나 `fill`같은 그리기 작업을 하는데 사용한다. - size: Canvas의 사이즈로, 너비와 높이를 나타내는 CGSize 구조체다. Canvas { context, size in } Pat..

iOS

[iOS] CMPedometer로 사용자의 걷기 데이터 받아오기 (이동 거리, 평균 페이스)

CMPedometer CMPedometer는 CoreMotion 프레임워크에 있는 클래스이다.  CoreMotion은 가속도계, 자이로스코프 등 여러 iOS 장치의 하드웨어에서 동작 관련 데이터를 제공할 수 있는 프레임워크이다.  처음에는 걸음 데이터를 받아오기 위해 어떤 클래스를 써야하는지 찾기 어려웠다. (CLLocation에는 CLLocationManager를 썼어서 CoreMotion에는 CMMotionManager를 쓰면 되는 줄 알았다는 ..) 공식 문서를 열심히 뒤적이다 발견한 것은 CMPedometer라는 클래스였다.  여기서 CMPedometer를 사용해서 데이터를 받아올 것이다!   CMPedometer의 문서를 읽어보면, CMPedometer 클래스는 시스템에서 생성한 실시간 걷기 데..

iOS

[iOS] Naver Map SDK Swift Package 만들기

프로젝트를 진행하며 Naver Map을 사용해야 해서 SDK 설치를 알아보니 네이버 지도 SDK는 cocoapods를 통해서만 배포된다는 사실을 알게되었다. 관련 글을 열심히 찾아보던 중 네이버 지도 SDK를 SPM으로 설치할 수 있도록 Swift Package를 만드는 글을 발견하였다.  https://junbok97.tistory.com/314 [iOS] NaverMap SDK iOS SPM으로 추가하기NaverMap SDK SPM 왜 지원안해줌 ?프로젝트에서 mapKit대신 navermap을 사용하기로 결정하였는데 Tuist를 사용하여 프로젝트를모둘화를 하게되어 cocoapods를 사용하지 못하게 되었다그런데 naverMap SDK는 cocoajunbok97.tistory.com 평소 의존성 추가를..

iOS/SwiftUI

[SwiftUI] 카카오 로그인 구현하기

카카오 로그인 버튼 디자인카카오 로그인 디자인 가이드에서 버튼 디자인을 다운받을 수 있다. 플랫폼 등록하기https://developers.kakao.com/docs/latest/ko/getting-started/app#platform위 링크의 가이드를 따라 플랫폼을 등록한 후 네이티브 앱 키를 기억해두자.만약 테스트앱을 팀원과 함께 사용하는 경우 팀 관리에서 팀원의 계정을 추가해야 카카오 API 사용이 가능하다.카카오 로그인 iOS SDK 설치하기 (SPM)1. ➊ [Project Target] > ➋ [Package Dependencies] > ➌ [Packages]의 [+] 버튼을 누른 후 아래 링크로 패키지를 검색한다.https://github.com/kakao/kakao-ios-sdk2. Kak..

시로-
'iOS' 카테고리의 글 목록