iOS 개발 중 로컬에 데이터를 저장할 때 UserDefault를 주로 사용했는데, UserDefault는 Key-Value로 저장되는 데이터라서 비교적 간단한 데이터는 저장해도 괜찮을 것 같지만 데이터베이스 역할을 하기에는 부적절해보였다. CoreData는 애플에서 제공하는 프레임워크로, 데이터베이스를 만들고 접근할 수 있는 방법을 제공한다. 아무래도 이론적인 부분을 파고들기 보다는 간단한 예제를 통해 기본적인 흐름을 파악하는게 익숙하기 때문에 간단한 예제를 만들어본 후에 이론적인 부분을 살펴보도록 하겠다. 예제 프로젝트 먼저 iOS 프로젝트를 생성한다. 여기서 Use Core Data를 체크하면 자동으로 데이터베이스 파일이 만들어지고 기본적인 접근 코드가 AppDelegate에 생성된다. (물론 체크..
일반 StickyHeader는 스크롤을 아래로 내렸을 때 위쪽에 윗변이 붙어있는 것 처럼 보이는 화면을 말한다. 하지만 헤더에는 스크롤을 아래로 내렸을 때도 계속 보여야 하는 필수적인 정보가 포함될 수도 있다. StickyHeader 효과를 그대로 가지고 있으면서 특헤더 중 특정 아래 영역을 항상 보이게 하는 autolayout을 만들어보자. 스토리보드로 만들면 만들 때는 쉽지만 유지보수 하기가 어렵기 때문에 스토리보드를 사용하지 않고 모두 코드로 작성해보도록 하겠다. 스토리보드를 사용하지 않고 코드로 화면을 만드는 방법은 아래 글을 참고하면 된다. 스토리보드 탈출 먼저 scrollView를 추가한다. autolayout이 중요하기 때문에 constraint 설정 부분을 자세히 봐야 한다. 참고로 모든 ..
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이 필요하다. 하지만 테..
- Total
- Today
- Yesterday
- Git
- ios
- C
- SHADER
- game
- ue4
- rxswift
- mongoDB
- Spring
- 데이터베이스
- OS
- database
- 국내여행
- C++
- C/C++
- SwiftUI
- DesignPattern
- 운영체제
- swift
- 알고리즘
- JSP
- machine learing
- Cocos2d-x
- Java
- scala
- winsock
- 자료구조
- SOCKET
- 드라마
- 수학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |