Danny의 iOS 컨닝페이퍼
반응형
article thumbnail
[iOS/Swift] 3. PinLayout 메서드를 알아보자! (+ ScrollView)
Xcode/Library 2024. 1. 20. 02:15

목차 FlexLayout, PinLayout을 사용해 보자! FlexLayout 모든 메서드들을 알아보자! PinLayout 메서드를 알아보자! (+ ScrollView)! 개인적으론 snapKit이 직관적이고 쉬운 것 같은데, 생각보다 FlexLayout + PinLayout도 많이 사용하는 것 같더라고요. 이제 거의 다 왔습니다. 빠르게 마무리 지어보고 사용하다가 팁이나 문제가 생기면 바로 새로운 글을 올려보겠습니다. PinLayout의 사용 시점은 레이아웃이 다 잡히는 시점(슈퍼뷰의 위치 및 크기를 알 수 있는 시점)인 viewDidLayoutSubViews(), layoutSubViews()에서 사용해줘야 합니다. 그 이유는 장치 회전 및 컨테이너 크기를 동적으로 조절하기 위해서 위와 같은 시점에..

article thumbnail
[iOS/Swift] 2. FlexLayout 모든 메서드들을 알아보자!
Xcode/Library 2024. 1. 16. 04:07

목차 FlexLayout, PinLayout을 사용해 보자! FlexLayout 모든 메서드들을 알아보자! PinLayout 메서드를 알아보자! (+ ScrollView)! 메서드들도 많고 CSS를 사용해 보지 않아서 그런가 생소한 단어들도 보이네요 ㅠ.ㅠ 뭔가 느낌은 알 것 같은데, 그래도 일단은 한 번씩은 써봐야 이해되겠죠?! 자, 이전 글 의 예제로 시작해 봅시다. import UIKit import FlexLayout import PinLayout class ViewController: UIViewController { private let containerView = UIView() private let label1: UILabel = { let label = UILabel() label.bac..

article thumbnail
[iOS/Swift] 1. FlexLayout, PinLayout을 사용해 보자!
Xcode/Library 2024. 1. 15. 19:09

목차 FlexLayout, PinLayout을 사용해 보자! FlexLayout 모든 메서드들을 알아보자 PinLayout 메서드를 알아보자! (+ ScrollView)! FlexLayout이란? FlexLayout은 CSS의 Flexbox를 영감을 받아서 만들어진 레이아웃 라이브러리라고 합니다. Auto Layout, UIStackView보다 8~12배 정도 렌더링 성능이 빠릅니다. SwiftUI와 마찬가지로 선언형이고 구문 연결(Chain-able)이 가능합니다. 일단, GitHub 문서 를 간단히 살펴보니, Flexbox와 동일한 역할을 하는 Container를 만들어 초기화시켜 주네요. 이 Container는 UIStackView와 비슷하게 동작하는 것 같은데, 같이 한 번 살펴봅시다. PinLa..

article thumbnail
[iOS/Swift] TextField를 바인딩 시켜보자(MVVM, RxCocoa 원리)
UIKit/Swift 2023. 11. 28. 01:40

시작 이전 글에서 [iOS/Swift] MVVM 패턴의 Data Binding에 대해서 알아보자! (Closure, Observable, Combine) 간단하게 바인딩을 하는 법을 알아봤습니다. 이전 글의 방법은 'ViewModel -> View 바인딩'으로 어디선가 데이터를 받아오면, ViewModel의 데이터들이 View와 결합되어, 즉시 View에 업데이트 되게 만들었고 이번에 공부해 볼 것은 'View -> ViewModel 바인딩' 에 대해서 알아보려고 합니다. 말 그대로 이번엔 View(사용자)에서 입력 받은 데이터를 즉시 ViewModel에 결합시키는 방법을 배워봅시다. 일단, 들어가기 전에 간단히 로그인 화면을 생각해 봅시다. 로그인 화면은 먼저 사용자가 ID와 Password를 입력을 ..

article thumbnail
[Swift/ TIP] subscript 활용 (깔끔하게 모델에 접근)
TIP 2023. 11. 21. 18:00

subscript란? 공식문서에서는 클래스, 구조체, 열거형 등 시퀀스의 멤버 요소에 접근할 수 있는 기능(문법)이라고 합니다. 공식문서 에 문법에 대한 자세한 내용은 나와있으니, 문법은 여기서 참고합시다! 다시 설명하면 클래스, 구조체, 열거형 등에서도 배열이나 콜렉션에서 사용되는 "[]" subscript 문법(첨자)을 통해 접근할 수 있게 도와준다네요. 그리고 subscript을 사용자의 요구사항에 맞게 정의할 수 있다고 하는데, 어떤 방식으로 사용할 수 있는지 간단히 알아봅시다. 사용자가 만든 모델에 쉽게 접근 가능 먼저, 이름과 나이로 간단한 모델(Model)을 만들어 줬고 클래스인 ModelManger를 통해 모델 데이터를 사용하기 편리하게 만들어 줬습니다. 추가로 subscript 문법을 사..

article thumbnail
[Swift/ TIP] 앱 이름 변경하기 (+Localization)
TIP 2023. 7. 21. 20:03

앱 이름 변경하기 info.plist를 수정을 통해, 간단히 앱 이름을 변경할 수 있습니다. 앱 이름 현지화 나라마다, 앱의 이름을 달리 해줘야 할 때 사용 ex. 영어권 문화에서도 앱을 출시했는데, 만약 한국어로 돼있다면 곤란하겠죠. 구현하기 1. Strings File을 생성하고 이름을 'InfoPlist.strings'로 저장해 주세요. 2. 만들어준, InfoPlist 파일의 인스펙터 창에서 'Localize' 버튼을 눌러 줍니다. 3. 프로젝트 설정으로 들어가 Localizations에서 한국어를 추가해 줍니다. 그러면 이와 같이, 하위 파일이 지역별로 나뉘어 생성됩니다. 4. 다시 'InfoPlist.string' 파일로 돌아와서 'Korea'가 체크 돼있다면, 사용 준비 완료! 5. 각 지역..

article thumbnail
[Swift/ TIP] 앱 추적 투명성 권한 요청 (App Tracking Transparency)
TIP 2023. 7. 21. 17:56

앱 추적 투명성(App Tracking Transparency) iOS +14.5부터 도입된 개인 정보 보호 관련 기능입니다. 앱에서 자신의 정보를 수집하거나 추적할 여부를 사용자에 물어보는 기능입니다. iOS +14.5 부터, ATT(App Tracking Transparency)가 도입되서 사용자가 추적을 허락할 때만, 광고 추적 식별자인 IDFA(Identifier for Advertisers)를 이용할 수 있게 됬습니다. 여기서, 광고 추적 식별자 IDFA(Identifier for Advertisers)는 사용자에게 맞춤형 광고를 보여주는 기능입니다. 자세한 내용은 공식 문서 를 참고해주세요. 앱 추적 권한 요청하기 먼저, info.plist에서 권한 요청 설정을 해줘야 합니다. 구현하기 참고로..

article thumbnail
[Swift/ TIP] Alert를 사용해, 앱 설정창으로 이동하기
TIP 2023. 7. 21. 16:31

시작 간단히, App Settings에 접근하는 코드를 알아 봅시다. private func presentAppSettingsAlert() { let alertController = UIAlertController( title: "위치 접근 요청", message: "위치 정보를 얻을 수 없습니다. 위치 권한을 '항상 허용'으로 변경해 주세요.", preferredStyle: .alert ) let action = UIAlertAction( title: "설정창 이동", style: .default, handler: goToAppSettings ) alertController.addAction(action) self.present(alertController, animated: true) } privat..

article thumbnail
[Swift/ TIL #37] UIPageViewController를 사용하여 튜토리얼 화면을 만들기
프로젝트 2023. 7. 18. 22:32

[TIL #37] 2023 / 07 / 18 앱을 처음 시작할 때, 나타나는 튜토리얼 화면을 만들어 보려 합니다. 보통 튜토리얼 화면을 만드는 방법으로는 UIScrolView 또는 UIPageViewController를 사용하여 만들 수 있습니다. 여기서 만약, 그냥 UIScrolView를 통해 만들게 되면, 기능을 구현하는 방식은 비슷하지만 레이아웃을 잡을 때, 생각보다 골치 아프더라고요. (스크롤 가능한 콘텐츠를 보여주기 때문에, 콘텐츠의 크기, 위치, 스크롤 영역 등을 정확한 설계가 필요) 그리고 UIScrolView는 보이는 영역(View Port)을 제외하고도 모든 페이지들이 메모리에 올라가기 때문에, 많은 페이지를 보여줄 때는 비효율 적일 수 있습니다. 예를 들어, [page1, page2, ..

article thumbnail
[Swift/ Tip] 스크린의 크기를 구해보자 (UIScreen.main is deprecated)
TIP 2023. 7. 18. 02:33

시작 iOS + 16부터 UIScreen.main는 더 이상 사용되지 않는다는 메시지가 뜨네요. 사용은 가능하지만 그래도 메시지가 거슬리니까, UIScreen.main을 사용하는 대신, 다른 방법으로 Screen의 크기를 구하는 방법을 알아봅시다. 방법 1 공식문서에서 하라는 대로 따라해보기 (정석?!) guard let screen = view.window?.windowScene?.screen else { return } let screenSize = screen.bounds 방법 2 UIApplication를 통해 window 접근해서 사용하기! guard let window = UIApplication.shared.connectedScenes.first as? UIWindowScene else { ..

article thumbnail
[Swift/ Tip] 한 버튼에서 2가지 동작을 사용해보자
TIP 2023. 7. 15. 01:56

속성 isSelected을 이용 속성 isSelected은 Bool 타입으로 값을 설정 안 한다면, false 값을 갖고 있습니다. isSelected에서 toggle 메서드를 이용해 줄 겁니다. 만약, 버튼을 클릭 될 때마다 toggle을 실행하게 만들어주면, isSelected의 값이 false true로 계속 전환되겠죠? 여기서, 간단한 로직을 추가하여 버튼이 클릭될 때마다 다른 동작을 갖도록 만들 수 있습니다. @objc func buttonHandelr(_ sender: UIButton) { // 말 그대로 Bool 값을 toggle 합니다. sender.isSelected.toggle() // 버튼이 클릭될 때마다, 버튼 이미지를 변환 if sender.isSelected { sender.se..

article thumbnail
[Swift/ TIL #36] Web 보여주기 (Safari 앱, SFSafariViewController, WKWebView)
프로젝트 2023. 7. 12. 23:35

[TIL #36] 2023 / 07 / 12 앱 내에서 Web을 보여주는 방법을 간단히 정리해보려 합니다. 크게 3가지 방법으로 Web을 보여줄 수 있습니다. 1. Safari 앱 직접 사용 2. SFSafariViewController 사용 3. WKWebView 사용 Safari 앱 직접 사용 직접, Safari App을 실행하여 Web을 보여주는 방식입니다. @objc func buttonHandler(_ sender: UIButton) { switch sender.currentTitle { case "Safari App": guard let url = URL(string: "https://www.apple.com"), UIApplication.shared.canOpenURL(url) else { ..

article thumbnail
[Swift/ TIL #35] 앱에서 Email 보내는 기능 (MessageUI)
프로젝트 2023. 7. 11. 16:51

[Swift/ TIL #36] 2023 / 07 / 11 이전에 이미 메일 보내는 기능을 구현을 해봤었는데, 오랜만에 다시 구현하려니 헷갈려서 간단히 정리한 뒤, 다시 사용하려고 이렇게 정리합니다. 사용방법은 공식문서 에 자세히 설명이 돼있어요. 시작 이렇게 버튼을 만들어줬고 버튼을 클릭하면 mail을 보내는 기능을 만들어 보려합니다. class ViewController: UIViewController { lazy var button: UIButton = { let button = UIButton(configuration: .filled()) button.frame = CGRect(x: 150, y: 400, width: 100, height: 50) button.setTitle("문의 사항", for..

article thumbnail
[Swift/ TIL #34] enum에서 Protocol 채택 및 적용 (프로토콜의 요구사항을 열거형 case에 적용)
프로젝트 2023. 7. 6. 02:56

[Swift/ TIL #34] 2023 / 07 / 06 Protocol의 요구사항들을 enum의 case로 적용시키는 방법 및 기본적으로 사용되는 enum에 Protocol을 채택하여 사용하는 방법을 알아봅시다. 처음 보는 선언 방식 열거형에 프로토콜을 채택하는 방법 중, 처음 보는 선언 방법이 있어 간단히 적어보려 합니다. (Protocol의 요구사항들을 enum의 case로 적용시켜 나열시키는 방법입니다.) 설명은 주석을 참고해 주세요. (제가 이해한 대로 적은 거라 틀린 내용이 있을 수 있습니다) 그리고 조금 더 자세한 정보를 알고 싶다면 밑에 참고 링크들을 참고해 주세요. // Swift 5.3 에서 도입 protocol DataProtocol { // Self 자기 자신을 반환 (아래 Enu..

article thumbnail
[Swift/ TIL #33] Git 커밋 메시지 컨벤션(+Gitmoji)
프로젝트 2023. 6. 29. 06:31

[Swift/ TIL #33] 2023 / 06 / 29 흠, 깃 커밋 내용은 최대한 자세히 쓰기만 하면 되는 줄 알았는데, 완전히 잘못하고 있었습니다. 뭐, 혼자 할 때는 크게 문제없겠지만, 나름의 개발자 사이에서 관습적으로 통용되는 규칙이 있더라고요. 나중의 협업을 위해서 간단하게라도 정리를 해보려 합니다. 많은 개발자 분들이 Udacity Git Commit Message Style Guide 를 참고하더라고요. Git Commit Message Convention 깃은 코드 형상 관리 도구로써, 파일의 변경사항을 기록하여 추적이 용이하게 만들어주는 도구죠. 만약, 코드에 문제가 발생 시, 문제 지점(변경 이력)을 추적하여 이전 버전으로 파일을 복구해줘야 합니다. 그런데 커밋 내용이 규칙적(일관적)..

반응형