글

iOS Apply modifiers conditionally

이미지
운영 체제: macOS Ventura 13.0 사용 버전: Xcode 14.1, SwiftUI, Swift ​ iOS Apply modifiers conditionally를 알아보겠습니다. SwiftUI를 사용할 때, Modifier를 조건문에 따라 적용하려면 다음과 같이 동일한 코드가 반복되는 형식으로 만들어야 합니다. 아래는 일반적인 방법입니다. 17 번째 줄과 21 번째 줄처럼 조건문이 들어갑니다. 그리고 달라지는 것은 Text의 border 여부만 달라지는데, 동일한 Text() 코드가 두 번 들어갑니다. ​ modifier를 조건에 따라 적용할 수 있도록 만들면 저렇게 중복되게 적지 않아도 됩니다. ​ ​ View extension을 만듭니다. @ViewBuilder를 이용합니다. if에는 `(억음 부호)로 감쌉니다. 저 if가 .if로 사용될 겁니다. Content는 View로 받아, 자신이 받는 View 타입을 그대로 사용한다는 뜻입니다. condition에는 조건문이 들어가고, transform에는 변형을 만들어주는 modifier 함수가 들어옵니다. ​ ​ 사용법은 아래와 같습니다. 19 번째 줄에 방금 만든 .if가 사용되었습니다. 클로저에서 myTextView를 사용하지 않고 $0로 사용해도 됩니다. 끝. 카테고리: iOS

iOS Using UIKit on SwiftUI with delegate

이미지
운영 체제: macOS Ventura 13.0 사용 버전: Xcode 14.0.1, SwiftUI, Swift, UIKit ​ iOS Using UIKit on SwiftUI with delegate를 알아보겠습니다. UIKit을 사용할 때에는 Delegate가 자주 사용됩니다. 어떻게 SwiftUI에서 UIKit을 사용할 때 delegate를 설정하는지 알아봅시다. ​ 이전 iOS Using UIKit on SwiftUI 게시글에 이어서 진행합니다. https://shwoghk14.blogspot.com/2022/11/ios-using-uikit-on-swiftui.html UITextVIew에는 UITextViewDelegate가 사용됩니다. ​ MyUITextView 내부에 class Coordinator라는 클래스를 하나 만듭니다. NSObject와 UITextViewDelegate를 상속받습니다. parent 타입에는 밖의 struct의 이름을 적고 init을 만들어서 parent를 초기화합니다. 저의 경우 parent의 타입은 MyUITextView입니다. Coordinator는 UIView와 SwiftUI와의 상호 작용에 사용되기도 하고 지금같이 Delegate나 DataSource 등을 위해서도 사용됩니다. parent에 밖의 struct를 연결함으로써 Coordinator와 MyUITextView가 서로 상호작용할 수 있습니다. ​ 밖의 struct에 13 번째 줄처럼 makeCoordinator 함수를 만듭니다. makeUIView 함수보다 makeCoordinator 함수가 더 빨리 불러와집니다. textViewDidBeginEditing이라는 UITextViewDelegate 중의 하나의...

iOS Using UIKit on SwiftUI

이미지
운영 체제: macOS Ventura 13.0 사용 버전: Xcode 14.0.1, SwiftUI, Swift, UIKit ​ iOS Using UIKit on SwiftUI를 알아보겠습니다. SwiftUI에서 모든 기능들을 제공해 주면 좋겠지만, 안타깝게도 UIKit에만 존재하는 기능들이 있습니다. 그럴 때에는 SwiftUI 안에서 UIKit을 사용해야 하는데요. 그래서 SwiftUI에서 UIKit을 사용하는 시간을 가져보겠습니다. ​ ​ UIView를 넣고 싶다면 UIViewRepresentable을 사용하고, UIViewController를 넣고 싶다면 UIViewControllerRepresentable을 사용합니다. ​ 간단하게 UITextView를 사용해 봅시다. 기본 SwiftUI 프로젝트를 만듭니다. 파일을 하나 만듭니다. File - New - File... Swift file을 선택합니다. 적당한 이름을 적고 Create를 만듭니다. 아래와 같은 파일이 만들어집니다. import Foundation을 지우고 import UIKit import SwiftUI를 추가합니다. ​ struct를 만들고 UIViewRepresentable을 상속받습니다. makeUIView 함수를 만듭니다. 안에는 uiTextView를 만들고 Return 합니다. makeUIView는 초기화할 때 한 번만 불러와집니다. 12 번째 줄 some UIView를 UITextView로 변경합니다. updateUIView를 만듭니다. UI가 업데이트될 때마다 이 함수가 불러와집니다. 업데이트될 때 할 행동이 없으므로 비워...

Android Hint text with image

이미지
사용 언어: Kotlin 1.7.20 사용 버전: Android Studio Dolphin 2021.3.1 ​ 안드로이드 Hint text with image를 알아보겠습니다. 아래처럼 사용자 입력을 받는 칸에 이미지와 함께 힌트를 표시할 수 있습니다. 하지만 우리가 해보려고 하면, 일반적으로 안드로이드 EditText에는 글자로만 힌트를 줄 수 있습니다.  xml에서는 android:hint로 해당 항목을 적습니다. 그런데 글자밖에 들어가지 않군요. 힌트에 돋보기 모양을 넣으면 더 멋질 거 같은데요. 글자와 이미지를 같이 사용하려면 어떻게 해야 하는지 확인해 봅시다. ​ 안드로이드에서는 ImageSpan이라는 것을 제공해 줍니다. https://developer.android.com/reference/android/text/style/ImageSpan SpannableString()으로 Span을 사용할 수 있는 글자를 만듭니다. ​ 이 글자에 setSpan을 통해서 조작을 할 수 있게 합니다. 글자로 만들 Drawable을 ImageSpan을 통해서 Span으로 만듭니다. 글자를 이미지로 바꿀 위치를 start와 end에 적습니다. flag 위치에 들어가는 SPAN_COMPOSING 등의 설명은 아래 사이트에 있습니다. 이미지를 글자로 변경하는 경우는 flag의 영향을 잘 받지 않는 것 같습니다. 아무 flag나 적어 줘도 됩니다. https://developer.android.com/reference/android/text/Spanned 실행해 봅시다. 짜잔. 힌트 영역에 돋보기와 ...

Android Show soft keyboard

이미지
사용 언어: Kotlin 1.7.20 사용 버전: Android Studio Dolphin 2021.3.1 ​ 안드로이드 Show soft keyboard를 알아보겠습니다. 일반적으로 soft keyboard는 사용자가 입력하는 공간을 눌렀을 때 나타납니다. 이번 시간에 다룰 내용은 사용자가 누르는 것이 아닌, 프로그램으로 키보드를 보이게 만들 겁니다. ​ ​ InputMethodManager가 필요합니다. requireActivity().getSystemService(context.INPUT_METHOD_SERVICE) as InputMethodManager를 사용하여 InputMethodManager를 불러옵니다. showSoftInput()을 사용하여 키보드를 불러옵니다. 괄호 안에는 키보드를 불러올 View와 flags를 적어줍니다. 저는 EditText와 숫자 1을 적었습니다. 만약 키보드가 나타나지 않는다면, 위에 210 번째 줄처럼 requestFocus()로 텍스트 입력 칸을 활성화시켜주는 과정이 필요합니다. 끝. 카테고리: Android

Android UI interaction with soft keyboard

이미지
사용 언어: Kotlin 1.7.20 사용 버전: Android Studio Dolphin 2021.3.1 ​ 안드로이드 UI interaction with soft keyboard를 알아보겠습니다. ​ 안드로이드에서는 글자 입력 칸을 눌렀을 때, 보이는 키보드를 소프트 키보드라고 부릅니다. 이 소프트 키보드가 보이게 되면, 어쩔 수 없이 화면이 가려지게 됩니다. 이 가려지는 것을 설정할 수 있습니다. UI를 덮을 건지, UI 밑에 붙을 건지 등 상호 작용이 가능합니다. 소프트 키보드와 UI의 상호 작용을 알아봅시다. ​ 적용할 수 있는 값들은 아래 사이트에서 확인 가능합니다. https://developer.android.com/guide/topics/manifest/activity-element#wsoft Activity에 적용하는 것이라면 AndroidManifest.xml에서 간단하게 적용할 수 있습니다. ​ 68 번째 줄처럼, android:windowSoftInputMode를 사용합니다. 하나하나 살펴봅시다. ​ stateUnspecified 실행 시, 보여줄지 숨길지 정하지 않은 상태입니다. 앱을 만들 때 기본으로 설정됩니다. UI는 키보드가 올라간 만큼 같이 올라갑니다. stateUnchanged 실행 시, 보이는 상태였으면 계속 보이게, 안 보이는 상태였으면 계속 안 보이게 합니다. UI는 키보드가 올라간 만큼 올라갑니다. stateHidden 실행 시, 키보드를 숨깁니다. UI는 키보드가 올라간 만큼 올라갑니다. stateAlwaysHidden 실행 시, 키보드를 숨...

Android Disable drag at BottomSheet

이미지
사용 언어: Kotlin 1.7.20 사용 버전: Android Studio Dolphin 2021.3.1 ​ 안드로이드 Disable drag at BottomSheet를 알아보겠습니다. ​ BottomSheet는 기본적으로 사용자가 아래로 끌어내려서 사라지게 만들 수 있습니다. 이 기능을 비활성화해서 사라지지 않게 만들 겁니다. ​ 아래는 기본 동작 화면입니다. BottomSheetBehavior을 사용합니다. BottomSheetBehavior.from()을 사용하여 가져올 BottomSheet의 BottomSheetBehavior를 불러옵니다. 여기에 isDraggable을 false로 설정하면 됩니다. 실행해 봅시다. 끝. 카테고리: Android

iOS Struct encoding to json

이미지
운영 체제: macOS Monterey 12.6 사용 버전: Xcode 14.0, Swift ​ iOS Struct encoding to json을 알아보겠습니다. ​ Struct를 http의 body에 넣어서 보내려면 json으로 변환을 해줘야 합니다. 그것을 해주는 것이 encoding입니다. ​ 먼저, struct를 정의합니다. Academics와 Student를 만들어봤습니다. 그리고 JSONEncoder를 불러오고, struct를 만듭니다. encode를 사용하면 다음과 같이 json으로 변환이 완료됩니다. 끝. 카테고리: iOS

Android Which volume will AudioAttributes use?

이미지
사용 언어: Kotlin 1.7.10 사용 버전: Android Studio Dolphin 2021.3.1 ​ 안드로이드 Which volume will AudioAttributes use를 알아보겠습니다. AudioAttributes를 통해서 안드로이드 시스템의 어떤 소리 채널로 재생할 건지 정할 수 있습니다. 예를 들면 알림 소리 크기를 사용하는지, 음악 소리 크기를 사용할 건지 등입니다. ​ ​ https://developer.android.com/reference/kotlin/android/media/AudioAttributes 아래처럼 Builder를 만들어서 사용합니다. 여기에 setUsage와 setContentType을 적으면 어떤 시스템 소리를 사용할 건지 설정됩니다. 아래 표를 보면 setUsage에 무엇을 넣으면 어떤 소리 크기와 대응되는지 알 수 있습니다. https://source.android.com/docs/core/audio/attributes 지금은 ASSISTANCE_SONIFICATION을 사용해서 SYSTEM_SOUND를 사용하게 됩니다. USAGE_NOTIFICATION을 사용하면 알림 소리 크기를 사용하게 됩니다. 끝. 카테고리: Android