카드 형태의 이미지를 만들 때 많이 사용하는 효과를 extension으로 쉽게 구현해 보겠습니다. 위의 이미지에서 보듯이 카드를 이용한 디자인을 할 때 디자이너들이 곡선과 함께 쉐도우를 주는 작업을 많이 합니다. 플랫 한 디자인이 아닌 약간 입체적으로 보이기 위해서 사용하는데 익스텐션을 이용해서 만들어보겠습니다. 다만 특정 UIView를 감싼 컨테이너가 필요하다는 점에 유의해 주세요. ▼ 실습에 앞서서 다음 두개의 라이브러리를 추가해 줍니다. import SnapKit import Then ▼ 그리고 뷰 컨트롤러에 컨테이너와 Box 뷰를 생성하겠습니다. 단순히 Conatiner 뷰를 화면에 붙이고 그 안에 box를 넣은 상태입니다. box의 경우 300의 높이 값을 가지고 상단, 좌우로 100 만큼 떨어..
▼ 우선 데이터를 만들기 위해서 Store 객체를 만듭니다. @Published 선언을 해서 2개의 색상을 만듭니다. updateDisplay 함수는 단순히 색상을 바꾸는 역할을 합니다. 처음 blue, green 색 에서 updateDisplay 함수가 호출되면 red, orange 색으로 바뀝니다. class Store: ObservableObject { @Published var colors: [Color] = [.blue, .green] func updateDisplay() { colors = [.red, .orange] } } ▼ 다음으로 ContentView에 Store() 객체를 생성해서 포함시킵니다. @main struct Test1App: App { @StateObject var stor..
Rust 란 Rust는 Mozilla Research에서 개발한 시스템 프로그래밍 언어로, 안전성, 성능, 병행성을 강조합니다. Rust는 메모리 안전성을 보장하면서도 저수준 프로그래밍을 지원하며, 동시성 작업을 위한 기능을 제공합니다. Rust는 넓은 응용 범위를 가지고 있으며, 운영 체제, 임베디드 시스템, 웹 개발 등 다양한 분야에서 사용될 수 있습니다. Cargo 란 Cargo는 Rust의 공식 패키지 관리자이자 빌드 도구입니다. Rust 프로젝트의 종속성 관리, 라이브러리 설치, 빌드, 테스트, 실행 등을 편리하게 처리할 수 있도록 도와줍니다. Cargo는 Rust 커뮤니티에서 널리 사용되며, 프로젝트의 구조화와 의존성 관리를 간편하게 해줍니다. Cargo는 Cargo.toml 파일을 사용하여 ..
UIDocumentPickerViewController ▼ UIDocumentPickerViewController는 파일 선택 기능을 제공하는 뷰 컨트롤러로, 파일 선택 창을 표시하고 사용자가 파일을 선택하면 해당 파일에 대한 처리를 위임합니다. 선택한 파일은 delegate를 통해 알려주며, 이를 활용하여 원하는 작업을 수행할 수 있습니다. 다중 선택을 허용하거나 모달 프레젠테이션 스타일 등을 설정하여 사용자 경험을 조정할 수 있습니다. ▼ 다음 코드는 didPickDocumentsAt에서 선택된 파일의 URL을 가져와 출력합니다. 그런 다음, 선택된 파일이 PDF 파일인지 확인하고, PDF 파일인 경우 파일명을 디코딩합니다. 이후, Data(contentsOf:)를 사용하여 파일 데이터를 가져옵니다...
▼ 보통 Rounded Corner를 처리하려면 다음 코드와 같이 레이어에 cornerRadius와 masksToBounds를 주는 것이 일반적입니다. 하지만 이렇게 하면 사각형의 모서리 4방향 모두 Radius 값이 적용됩니다. ▼ 때문에 다음과 같은 익스텐션을 만들어서 활용하는 것이 편리합니다. UIBezierPath로 path를 생성하고 마스킹하는 형태의 방법입니다. 이렇게 하면 UIRectCorner 옵션을 받아서 각 모서리 별로 둥글게 처리할 수 있습니다. ▼ 다음은 .topLeft, .topRight 옵션을 준 모양입니다. 위쪽 왼쪽 오른쪽 모서리만 둥글게 처리된 것을 볼 수 있습니다. ▼ 이번에는 좌측 상단과 우측 하단만 주어서 아이콘 모양의 디자인을 만들수도 있습니다. 이밖에도 다양한 활용..
▼ 사용할 웹뷰 컨트롤러 또는 웹뷰에 UIScrollViewDelegate 델리게이터를 구현합니다. 델리게이터에는 다양한 기능이 있지만 그중에 Zoom 기능을 막기 위해서는 scrollViewWillBeginZooming를 구현합니다. 구현된 함수 내에서 pinchGestureRecognizer 기능을 false로 변경합니다. ▼ 웹뷰에 적용하기 위해서 델리게이터를 self로 연결해 줍니다. 만약 iOS 웹뷰 WKWebView 텍스트 선택 및 길게 누르는 이벤트 막기를 원한다면 다음 글을 참고하세요. https://code-algo.tistory.com/106 [Swift] iOS 웹뷰 WKWebView 텍스트 선택 및 길게 누르는 이벤트 막기 아이폰 롱터치 방지 아이폰 개발을 하다보면 웹뷰를 사용할 때..
AudioSession AudioSession은 싱글톤으로 구현되어 있으며 앱 오디오 세션과 앱의 인터페이스를 정의할 수 있습니다. setActive 함수는 앱이 오디오를 사용하겠다고 통보하는 기능을 하고 반대로 setDeactive는 앱이 오디오를 사용하지 않겠다고 통보합니다. 오디오 세션을 설정할때는 3가지 옵션이 있는데 각각 다음과 같습니다. 예를 들어 카플레이를 사용할 때는 모드를. voicePrompt를 사용합니다. Category (playback, playAndRecord) Mode (default) Option (mixWIthOthers, duckOthers) 위의 코드의 핵심은 mixWithOthers 옵션을 사용해 다른 앱과 오디오가 겹칠 때 동시에 재생한다는 것과 defaultToSp..
스위프트 UI URLSession 통신 보통 앱을 만들때 API 통신을 하려면 Alamofire를 많이 사용합니다. 오늘은 SwiftUI에서 Alamofire가 아닌 URLSession 객체를 통해 통신을 하고 값을 표출하는 테스트를 해보겠습니다. 우선 사용될 URL은 다음과 같습니다. 브라우저에 입력해보면 JSON 형태의 데이터로 된 것을 확인 할 수 있습니다. JSON 데이터 URL와 데이터 Struct 정의 https://itunes.apple.com/search?term=taylor+swift&entity=song ▼ 우선 JSON 형태에 맞게 Codable를 상속 받은 데이터 Struct를 만들어줍니다. Response는 응답 받는 데이터 형태이며 Result 타입의 데이터를 배열형태로 가지게 ..
idleTimerDisabled 아이폰 프로젝트를 진행하면서 증권 앱이나 게임 화면의 경우 idleTimerDisabled 옵션을 true로 변환해서 화면이 계속 켜져 있도록 할 수 있습니다. 하지만 저전력 모드나 절전 모드를 활용하는 사용자에게 해당 옵션을 줄 경우 앱이 계속 켜져 있기 때문에 대기 모드나 화면 절전모드로 넘어가지 않습니다. ▼ 다음은 아이폰의 디스플레이 및 밝기 설정의 자동 잠금 옵션입니다. 만약 idleTimerDisabled를 true로 한다면 자동잠금을 안 함으로 한 것과 동일한 효과를 줄 수 있습니다. ▼ 다음과 같이 idleTimerDisabled 옵션을 단순히 true 로 하고 AppDelegate에서 실행하면 해당 앱은 홈 버튼을 눌러서 종료하지 않는 이상 꺼지지 않습니다..
▼ 우선 HapticsManager 라는 클래스를 만들어주고 static let을 선언해서 싱글톤 객체로 만들어줍니다. 이는 햅틱 이벤트를 여러번 사용해도 동일한 객체를 재사용하는 효과를 가져옵니다. ▼ 다음으로 노티피케이션에 대한 함수를 만들어줍니다. ▼ 마지막으로 햅틱 이벤트를 전달하기 위한 함수를 하나 정의합니다. ▼ 이제 햅틱 이벤트를 발생시켜보겠습니다. 햅틱 style의 종류는 다음과 같습니다. light medium heavy soft (iOS 13) rigid (iOS 13) ▼ 다음은 전체 코드입니다.
아이폰 앱 스키마 이동 아이폰으로 앱 개발을 하다 보면 다른 앱을 열어야 하는 때가 있습니다. 다른 앱을 여는 방법은 유니버셜 링크나 파이어베이스 다이나믹 링크등 여러 가지가 있지만 그중에서도 오늘은 가징 기초적인 스키마로 앱을 여는 방법에 대해서 알아보겠습니다. 또한 사용자 편의를 위해서 앱 스키마로 앱을 열어서 앱이 없으면 해당 앱을 다운로드할 수 있는 앱스토어로 이동하는 코드도 포함합니다. ▼ 우선 앱스토어로 이동하는 코드입니다. 단순히 itms-apps:// 스키마를 통해 앱스토어를 열어주고 id 값을 인자로 받아서 처리합니다. 이 밖에 리뷰페이지로도 이동할 수 있고 여러 이동 경로가 있습니다. ▼ 다음은 앱이 설치되어 있는지 확인하고 설치된 앱이 없으면 위에서 정의한 moveAppStore를 호..
iOS WKWebView Done 버튼 얼마전에 개발을 하면서 아이폰 웹뷰에 Done 닫기 버튼이 기본적으로 활성화 된다는 사실을 알았습니다. 웹뷰의 보조적인 기능을 하는 버튼인데 사실상 뷰 영역을 더 작게 보이게 하며 특히 아이폰 미니의 경우 화면이 더 작아지더군요. 그래서 처음에는 웹에서 처리하는 건 줄 알았는데 iOS 네이티브에서 WebView를 상속받아서 처리해줘야 했습니다. 생각보다 간단하게 작업할 수 있습니다. ▼ 우선 웹킷의 WebView를 상속 받은 클래스를 하나 만들어줍니다. 저는 RichEditorWebView 라는 이름으로 만들었으나 다른 이름으로 만들어줘도 무방합니다. ▼ 이제 상속 받아서 쓰면 됩니다. WebView를 확장한 RichEditorWebView를 상속 받아서 사용하면 ..