일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ios
- UserDefaults
- segue
- UIStackView
- ViewModifier
- CoreLocation
- kakaomap
- Appearance변경
- android
- EventKit
- 백준
- cocoapods
- Kotlin
- NotificationCenter
- alamofire
- 코딩테스트
- SWIFT
- autolayout
- programmers
- MapKit
- SwiftUI_Preview_Provider
- swiftUI
- snapkit
- pod install
- Alert
- ios15
- format형식
- AsyncImage
- Java
- image
- Today
- Total
목록IOS (45)
감자주먹밥
이번에는 간단하게 변경한 UI 2가지를 정리하려고 한다.TableView 무한 스크롤의 경우 구현 한 적이 있었지만, 최신곡, 인기곡 등 그렇게 버거울 정도의 데이터가 한번에 들어오는게 아니여서 그냥 한번에 데이터를 불러와 보여줬었지만노래 검색의 경우 "사랑" 단어를 포함한 노래만 4만곡 이상을 넘어가는 것으로 기억한다. 이것 때문이라도 페이징으로 데이터를 불러와야 할 거 같아 수정했다.TextField+UIDatePicker는 최신곡 조회 기능에 날짜를 선택하기위해 사용했었는데, DatePicker에 연, 월 만 선택하는 걸 원했지만 당시에 왜 속성이 없지? 하면서 그냥 Date 전체를 선택할 수 있게 했던게 아쉬워서 수정하게 됐다.수정을 위해 좀 알아보던 중 datePickerMode에 yearAnd..
iOS 강의를 다 듣고 바로 만들어서 배포해 본 앱이 있는데,, 이번에 다시 보니 정말 배웠던거 그대로 다 넣느라고 이상한게 많아서 수정하면서 정리를 하기로 했다.앱의 기능 중 맘에 드는 곡을 북마크 하면 따로 애창곡 리스트로 볼 수 있는 기능이 있는데, 당시에 UserDefaults를 알게되고 아! 이게 iOS에서 DB처럼 쓰는거구나! 하면서 그냥 사용했다.그러다 옛날 블로그 포스팅으로도 있지만 CoreData 존재를 알고나서 보니 멍청한 짓을 한 거 같아서 이것부터 수정하기로 했다.일단 둘의 차이점을 먼저 알아보자면UserDefaults는 App Setting 정보 같은 간단한 정보를 저장하기에 적합하고CoreData는 복잡하고 큰 데이터를 저장하기 적합하다.CoreData를 데이터베이스 자체로 알고..
CoreData는 UserDefaults와 비슷하다 생각할 수 있지만, UserDefaults는 간단한 데이터 정도의 저장이 적합하고, CoreData는 UserData, 큰 데이터를 저장하기 용이하다. 여기서 CloudKit까지 같이 사용해 준다면, GoodNote 어플처럼 따로 서버를 두지 않고 여러 기기의 앱 내에서 데이터를 동기화시킬 수 있다. key-value형식이나 파일, 또는 CoreData Model 형식과 비슷하게 저장할 수 있는데 GoodNote는 파일 형식으로 저장해서 사용하는 것 같다. SwiftData가 곧 나와 금방 잊혀질 것 같으니 미리 공부해 적용해 봤다. 구현 먼저 프로젝트 생성시에 Use CoreData, Host in CloudKit을 체크하여 생성한다. 체크하면 Per..
Diffable Data Source? Diffable DataSource는 WWDC 19에 발표되었고, IOS 13 이상 부터 사용가능하다. TableView, CollectionView의 DataSource에서 개선된 것임으로 둘 다 적용이 가능하다. 변경된 Data를 적용해야 할 때 그냥 reloadData를 써버리거나, performBatchUpdates로 애니메이션 까지 신경쓰며 갱신을 해 줬지만, Diffable DataSource를 사용하면 첫 설정에 UI에 대한 설정 말고는 데이터가 변할 때 마다 apply만 해 주면 알아서 애니메이션 까지 자연스럽게 적용할 수 있다. 적용하기 먼저 결과 화면 먼저 스토리 보드를 사용해 collectionView를 추가했다. Diffable DataSour..
1. 프로젝트에 Firebase 추가 https://console.firebase.google.com/?hl=ko 로그인 - Google 계정 이메일 또는 휴대전화 accounts.google.com Firebase console에 들어가 프로젝트를 생성하고 설명을 따라가면 쉽게 프로젝트를 생성할 수 있다. GoogleService-Info.plist 를 프로젝트에 추가하고 2. Authentication에 사용할 로그인 제공업체 선택 새 제공업체 추가를 누르고 구글, 애플을 추가했다 3. 프로젝트에 애플 로그인 설정 먼저 프로젝트에 들어가 Target의 Signing&Capabillities 를 선택하면 Capaillity를 추가할 수 있는 버튼이 있다. 버튼을 누르고 Sign In with Apple..
https://developer.apple.com/documentation/swiftui/view-styles View styles | Apple Developer Documentation Apply built-in and custom appearances and behaviors to different types of views. developer.apple.com Label, Button 등의 View에 스타일을 지정하거나 커스텀 할 수 있게 하는 것이 ViewStyle이다. Label을 예로 들면,,, 기본으로 Label의 style에는 4가지 정도가 있는데, 사용자가 커스텀 해서 스타일을 만들 수 있다. Custom Style을 만들기 위해서는 LabelStyle 프로토콜을 채택한 구조체를 만들면..
SwiftUI 에서 지도를 띄우기 위해서는 먼저 MapKit을 import 해야한다. Map(coordinateRegion:, interactionModes:, showsUserLocation:, userTrackingMode:, annotationItems:, annotationContent:) MapKit을 import 하면 지도를 보여주는 Map 을 사용해 View에 보여줄 수 있다. coordinateRegion: Binding 타입으로 지도가 표시될 위치와 지도의 zoom level을 초기화해 주입한다. MKCoordinateRegion(center:, span:) MKCoordinateRegion(center:, latitudinalMeters:, longitudinalMeters:) MKCo..
EventKit 달력, 미리알림 어플의 데이터에 접근 하여 이벤트를 생성, 검색, 편집을 할 수 있는 프레임워크. 먼저 사용하기 전, info.plist에 권한 체크를 받아야 한다. let status = EKEventStore.authorizationStatus(for: .event) switch status { case .notDetermined: //아직 권한 팝업 뜨기 전 let accessGranted = try await ekStore.requestAccess(to: .event) guard accessGranted else { throw ServiceError.accessDenied } case .restricted: throw ServiceError.accessRestricted case ..
대부분 Json을 사용하기 때문에 XML을 사용할 일이 없었는데, OpenAPI를 하나 사용하다 보니 무조건 XML로만 데이터가 넘어와 XML을 파싱하는 법을 알아보고 적용해봤다. XMLParser Foundation에 기본으로 들어가 있는 XMLParser를 사용해 XML을 파싱할 수 있는데, Json과 달리 태그와 값으로 이루워진 XML특성상 사용을 위한 Delegate를 설정해줄 필요가 있다. 먼저 초기화는 간단하다. let parser = XMLParser(data: data) parser.delegate = subjectParser.self parser.parse() Data 타입의 XML을 XMLParser의 초기화 파라미터로 받을 수 있고, URL도 초기화시 받을 수 있는데, URL은 테스트..
저번에 UICollectionView의 Compositional Layout을 공부할 때 만들었던 영화앱의 API 통신 부분을 공부할 겸 변경하게 되었다. 영화진흥원 API를 사용해 일간, 주간 박스 오피스 리스트를 가져오고, KMDB API를 사용해 영화 상세정보를 받아와 포스터를 띄웠다. ///BoxOffice 일간, 주간 정보 모두 반환 func searchBoxOfficeInfo(dateRange: DateRange) async throws -> [MovieInfo] { let url = APIInfo.boxOfficeHost + dateRange.rawValue var dataTask: DataTask switch dateRange { case .daily: let param = BoxOffic..