iOS 개발 중 로컬에 데이터를 저장할 때 UserDefault를 주로 사용했는데, UserDefault는 Key-Value로 저장되는 데이터라서 비교적 간단한 데이터는 저장해도 괜찮을 것 같지만 데이터베이스 역할을 하기에는 부적절해보였다. CoreData는 애플에서 제공하는 프레임워크로, 데이터베이스를 만들고 접근할 수 있는 방법을 제공한다. 아무래도 이론적인 부분을 파고들기 보다는 간단한 예제를 통해 기본적인 흐름을 파악하는게 익숙하기 때문에 간단한 예제를 만들어본 후에 이론적인 부분을 살펴보도록 하겠다. 예제 프로젝트 먼저 iOS 프로젝트를 생성한다. 여기서 Use Core Data를 체크하면 자동으로 데이터베이스 파일이 만들어지고 기본적인 접근 코드가 AppDelegate에 생성된다. (물론 체크..
UIView 를 다루다 보면 layer라는 인스턴스에 접근하게 될 때가 있다. 이 layer는 CALayer의 인스턴스로 iOS나 OS X가 화면에 컨텐츠를 그릴 때 사용하는 class다. UIView로 내용을 그리는 줄 알았는데, UIView는 이 CALayer를 좀 더 쉽게 다룰 수 있게 하는 일종의 wrapper class였던 것이다. 그래서 이 CALayer라는 것을 알아보았다. UIView보다 좀 더 로우 레벨에서 CPU에 부담을 주지 않고, 더 자유로운 그래픽 출력을 할 수 있다고 한다. CALayer의 CA는 Core Animation의 약자로 CAAnimation으로 만들 수 있는 property로 구성된 class다. 다시 말해서 CALayer가 가지고 있는 대부분의 property들은 ..
iOS 프로젝트를 만들면 메인 스토리보드와 AppDelegate.swift, SceneDelegate.swift 파일이 기본 생성되어 있다. UIkit framework에서 delegate는 이벤트를 처리할 수 있는 대리자를 뜻한다. 따라서 AppDelegate는 Application 레벨에서 발생하는 이벤트를, SceneDelegate는 Scene 레벨에서 발생하는 이벤트를 처리한다는 뜻이다. Scene 원래는 하나의 application이 하나의 scene을 가지고 있었기 때문에 이 둘을 구분할 필요가 없었지만 iPadOS가 등장하고 iPad에서 하나의 화면에 여러 application을 실행할 수 있게 되면서 이 둘의 관계가 더이상 1:1이 아니게 되었다. 이렇게 생성되는 이벤트가 어떤 상황에 어떤..
UILabel을 animate 시켜보자. ViewController 사이를 이동할 때, 한 ViewController 안에서 내용에 따라 layout이 달라져야 할 때 UIView.animate로 view를 이동시키는데, 그 중 UILabel은 없어서는 안되는 view이기 때문에 UILabel로 시작하는게 좋을 것 같다. 이런걸 한 번 만들어보자. 쉽게 생각해보자. UIView.animate는 UIView의 최종 상태를 정하는 closure를 통해 animation을 재생한다. 그렇다면 label의 font size를 늘려주면 되지 않을까? UIView.animate(withDuration: 2.0, animations: { label.font = .systemFont(ofSize: 32) }) 모든 U..
이미 블로그에 CollectionView를 가지고 pinterest 형식으로 layout을 만드는 방법을 포스팅 했지만 해당 포스팅은 storyboard와 코드를 조합해서 만들었고, 이번에는 온전히 코드만 가지고 만드는 방법에 대해서 작성한다. 앞서 포스팅 한 UITableView와 유사한 부분이 많은데, CollectionView는 안에 들어가는 cell의 크기와 위치를 정하기가 좀 더 자유롭다. Layout 자유로운 cell의 위치와 크기는 UICollectionViewLayout이라는 Layout 객체로 관리할 수 있다. pinterest layout은 고정된 width와 유동적인 height를 가지는 cell을 일정한 간격으로 띄워서 화면에 보여주며, 불규칙한 모자이크 또는 지그재그로 놓인 벽돌을..
더이상 같은 프로젝트를 가지고 포스팅을 이어나가는게 무리라는 판단이 섰다. 일단 프로젝트 자체도 뭔가 완벽히 기획된 상태가 아니고, 어떤 기능을 배우기 위해서 컨텐츠를 추가하면 그 컨텐츠에 필요한 부가적인 코드를 작성해야 하기 때문에 논점이 흐려진다. 대신 프로젝트는 따로 진행하고 진행하면서 배우게 된 큰 단위의 개념들을 모아서 따로 예제를 만들면서 포스팅하는 방향으로 바꿨다. UITableView UITableView는 스크롤 할 수 있는 row(행)집합을 그린다. 위아래로 스크롤 할 수 있으며, 기본적으로 .plain, .grouped라는 2가지 스타일을 제공한다. plain은 row에 채울 데이터 값이 없어도 table을 그리지만 insetGrouped와 grouped의 경우 필요한 row만 그리고..
회원가입 페이지를 각 항목을 입력하는 화면으로 나눠서 만들고 싶어서 UIPageViewController라는 ViewController를 사용하려 했지만 막상 공부를 해 보니 예상했던 기능과는 조금 다른 용도로 사용하는 것 같다. 먼저 만들고자 하는 회원가입 절차를 생각해보자. 지금까지 만든 회원 정보 중에 처음에 사용자가 입력할 수 있는 부분은 2가지다. 이름은 텍스트로 입력을 받고 프로필 사진은 현재 라이브러리 또는 카메라로 사진을 선택할 수 있도록 한다. 이렇게 입력받은 2개의 데이터를 서버에 있는 데이터베이스에 등록하고 다음번에 로그인 할 때 이 데이터를 불러와서 화면에 그릴 수 있도록 한다. 이미 firebase로 연동을 했기 때문에 정상적으로 회원가입을 하려면 token이 필요하다. 하지만 테..
IOS 프로젝트를 생성할 때 swiftUI와 storyboard 중 하나의 인터페이스를 사용해서 만들 수 있다. swiftUI를 사용할 경우 코드와 canvas로 화면을 구성 하게 되지만 storyboard를 선택하면 GUI환경에서 UI 배치 작업을 할 수 있는 storyboard라는 파일이 생긴다. GUI 환경에서 작업하고 IBOutlet 같은 annotation으로 연결할 수 있지만 속도도 느리고, 화면도 작아서 맥북으로는 원활하게 작업할 수가 없다. 차라리 storyboard를 없애고 코드로 작업할 수 있도록 환경을 바꿔 보자. 먼저 main.storyboard를 삭제한다. 하지만 프로젝트는 아직 main.storyboard를 인터페이스로 알고 있기 때문에 프로젝트 속성으로 들어가서 인터페이스 항목..
- Total
- Today
- Yesterday
- Git
- Java
- machine learing
- 알고리즘
- 운영체제
- SOCKET
- SHADER
- game
- C/C++
- rxswift
- database
- 국내여행
- OS
- ios
- ue4
- 자료구조
- DesignPattern
- Cocos2d-x
- Spring
- JSP
- scala
- 수학
- 드라마
- winsock
- swift
- 데이터베이스
- C
- mongoDB
- SwiftUI
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |