iOS 개발시 UIPasteboard 클래스를 이용해서 클립보드에 저장된 데이터를 읽고 쓰는 것이 허용됩니다. UIPasteboard 클래스의 general 속성을 이용해서 pasteboard 객체를 가져와 string 속성에 저장할 수 있습니다. SwiftUI 에서도 동일하게 사용할 수 있습니다. 다음 예제는 문자열을 클립보드에 저장하는 기능을 합니다. let p = UIPasteboard.general p.string = "OK" 반대로 값을 가져와 사용해야 하는 경우 다음과 같이 처리합니다. if let str = p.string { // str 은 클립보드의 데이터 } 다만 iOS 14 이전에는 사용자 동의 없이 클립보드 데이터를 액세스 할 수 있었습니다. 하지만 보안상 문제가 되어 사용자의 동의..
배열에 배열을 추가하는 방법은 총 3가지가 있으며 선호하는 방식으로 사용할 수 있습니다. 우선 테스트를 위한 배열 2개를 만들어보겠습니다. 주의 하실 것은 첫번째 배열의 경우 mutable로 선언했다는 것입니다. 그래서 두번째 배열을 병합할 수 있습니다. var first = ["서울", "부산"] let second = ["경기", "대전"] 1. 첫번째로 append(contentsOf:) 메서드를 이용해서 이 둘을 병합할 수 있습니다. first.append(constentsOf: second) 2. 두번째로 += 연산자로 두 배열을 병합할 수 있습니다. first += second 3. 마지막으로 이 두 배열을 + 연산자로 더해서 다른 변수에 할당할 수 있습니다. let third = first ..
스위프트 Charts 라이브러리 iOS 개발을 하다보면 다음과 같은 차트 라이브러리를 많이 사용하게 됩니다. 차트 라이브러리를 사용하게 되면 그중에 ValueFormatter를 커스텀 해야 할 때가 있습니다. 텍스트의 크기나 라벨의 문구를 반복적으로 수정하는 일이 필요할 때 사용하며 때에 따라 알맞게 사용하면 됩니다. https://github.com/danielgindi/Charts/tree/master GitHub - danielgindi/Charts: Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart. Beautiful charts for iOS/tvOS/OSX! The Apple side of ..
어느 프로그래밍 언어든 마찬가지 이겠지만 스위프트를 사용하다보면 아주 다양하게 딕셔너리 값을 사용하게 됩니다. 특히나 통신 파라미터를 만들기 위해서 요청(Request) 값을 만들다보면 자주 사용합니다. 하지만 대부분의 상황에서는 Any에 nil 값을 사용하지 않겠지만 일반적으로 nil 값을 넣으면 값이 추가되지 않는 것을 볼 수 있습니다. ▼ 아래 구문은 에상과 달리 key1의 값이 존재하지 않습니다. nil 포함하게 되면 "key1" 값은 포함되지 않게 됩니다. var myDictionary: [String: Any?] = [:] // nil 값을 포함하는 예시 myDictionary["key1"] = nil myDictionary["key2"] = 42 myDictionary["key3"] = "H..
카드 형태의 이미지를 만들 때 많이 사용하는 효과를 extension으로 쉽게 구현해 보겠습니다. 위의 이미지에서 보듯이 카드를 이용한 디자인을 할 때 디자이너들이 곡선과 함께 쉐도우를 주는 작업을 많이 합니다. 플랫 한 디자인이 아닌 약간 입체적으로 보이기 위해서 사용하는데 익스텐션을 이용해서 만들어보겠습니다. 다만 특정 UIView를 감싼 컨테이너가 필요하다는 점에 유의해 주세요. ▼ 실습에 앞서서 다음 두개의 라이브러리를 추가해 줍니다. import SnapKit import Then ▼ 그리고 뷰 컨트롤러에 컨테이너와 Box 뷰를 생성하겠습니다. 단순히 Conatiner 뷰를 화면에 붙이고 그 안에 box를 넣은 상태입니다. box의 경우 300의 높이 값을 가지고 상단, 좌우로 100 만큼 떨어..
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..
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를 호..