최근 다른 카테고리 포스팅에는 개인적으로 느낀 난이도 별로 Beginner, Advenced, Master로 나눠서 작성했는데 IOS는 하나의 애플리케이션을 만드는 과정을 나누어 담다 보니 Training이라는 등급으로 퉁 쳐서 작성하고 있다. 이 등급은 그렇게 큰 의미가 없는 것 같다. 분류 방법을 다시 생각해 봐야겠다. 서버로부터 데이터도 받아 오겠다 끌어내려서 새로고침 되는 기능을 만들어 보자. UITableView, UIScrollView 등 끌어내리는 동작을 할 수 있는 view들은 보통 UIRefreshControl 이라는 view를 가지고 있어서 이걸 통해서 indicator를 보이게 하거나 이벤트를 처리할 수도 있지만 Profile은 sticky header autolayout이 동작하고 ..
프로필 화면을 초기화 할 때 데이터를 코드에서 직접 생성해서 초기화 하고 있다. 로컬 데이터가 있으면 파일을 읽어서 초기화 하도록 만들긴 했지만 프로그램에서 직접 처리한다는 점은 변함이 없다. 이 프로필 데이터를 서버에서 받아올 수 있도록 만들어 보자. 서버 서버 개발을 다루는 포스팅이 아니기 때문에 정말 간단하게 서버를 구축하고 통신하는 부분으로 넘어가자. 먼저 서버를 만들어야 한다. 서버는 어떻게 만들어야 하나.... 서버를 만들기 위한 여러가지 프레임 워크가 있지만 spring-boot가 가장 먼저 눈에 띄어서 spring-boot로 만들기로 했다. start.spring.io 로 들어가서 spring-boot 프로젝트를 생성하고 다운 받았다. 콘솔에서 mvnw라는 wrapper를 실행시켜서 jar..
아 정말 이름이 너무 길다. 이름만 봐도 무슨 일을 하는지 알 수 있어서 좋지만 이렇게 긴 영어단어를 띄어쓰기도 없이 쓰면 줄바꿈이 엉망이 된다. 아무튼 이 전 포스팅에서 UIViewControllerTransitioningDelegate를 사용하면서 animationController 뿐 아니라 interactionController도 있다고 했는데 바로 그 interactionController로 사용할 수 있는 class다. 이 class(protocol이 아니다)를 가지고 버튼을 누를 때 말고 pan gesture를 할 때도 side menu가 보일 수 있도록 만들어 보자. dismiss 할 때는 이전과 동일하게 dimmingView를 탭 하면 dismiss가 일어나도록 하고, present 할 ..
많은 애플리케이션이 SideMenu를 사용하고있다. XCode는 TabViewController, NavigationViewController 등은 제공하지만 SideMenu는 제공하지 않는다. 그래서 직접 만들어보기로 했다. 좌측 상단에 버튼을 추가하고 버튼을 눌렀을 때 새로운 ViewController를 추가할 수 있도록 만들면 될 것 같다. let sideButton = UIButton() sideButton.setImage(UIImage(systemName: "line.horizontal.3"), for: .normal) sideButton.addTarget(self, #selector(presentSideMenu), for: .touchUpInside) scrollView.addSubView(s..
SwiftUI에서 처음 만들었던 예제인 StickyHeader를 UIKit을 활용해서 만들어보자. 이전 포스팅에서 MVC 패턴으로 나누면서 controller 부분을 넘어갔다. 지금까지는 사용자의 입력에 따라 view가 바뀌는 부분이 없었기 때문에 view와 controller를 분리해서 생각할 부분이 없었는데 이번에 StickyHeader를 만들면서 둘을 분리해서 생각해 볼 수 있을 것이다. Header constraints 지금까지 만든 화면을 다시 보면 가장 아래에 UIView부터 UIScrollView, UILabel 등을 추가해서 만들었다. 이 상태로 실행해보면 header가 scroll 상단에 붙어있기는 하지만 아래로 스크롤 할 때 같이 스크롤 된다. sticky header는 아래로 스크롤 ..
Swift4 부터 JSON 데이터를 다룰 수 있는 Codable이라는 protocol이 추가되었다. 정확히 말하면 JSONEncoder, JSONDecoder 라는 JSON parsor가 요구하는 protocold로 JSON으로 작성된 데이터를 읽어서 저장할 수 있는 Decodable, Swift 데이터를 JSON으로 변환할 수 있는 Encodable, 그리고 이 두가지를 모두 가능하게 하는 Codable, 이렇게 세 종류가 있다. Codable은 Foundation에 정의되어 있기 때문에 사용하기 위해서는 Foundation을 import해야 된다. 숫자나 문자열을 저장하려면 Int, Float, String을 사용할 수 있고, 또 다른 codable을 사용할 수도 있다. General 일반적으로 변환..
지금까지는 화면을 만들 때 view의 내용을 코드에 직접 기입해서 만들었다. 예를 들어 이름을 표현하기 위해서 UILabel을 이렇게 만들었다. let nameLabel = UILabel(frame: CGRect(x: 0, y:0, width: 200, height: 50)) nameLabel.text = "사나" // asset name 위처럼 만드는 것은 빠르게 화면을 구성할 때는 좋지만 나중에 화면의 내용이 바뀌거나 추가될 때 코드를 직접 수정해야 한다. 그래서 "사나" 와 같은 데이터는 따로 저장을 해 두고 데이터로 부터 화면을 구성할 수 있도록 구축하면 좀 더 유연하게 유지보수 할 수 있다. 그 유명한 MVC(Model View Controller) 패턴이다. MVC Pattern 디자인 패턴은..
프로필 화면이 너무 허전하니까 뭔가 좀 더 꾸미고 싶은데, 샘플로 트와이스 사나님의 프로필을 사용했기 때문에 나머지 내용도 참고했다. 먼저 지난 포스팅에 프로필 사진이 네모로 그려지는 상태로 끝냈기 때문에 이걸 어떻게 동그랗게 자르는지 알아보자. CALayer UIView는 layer라는 인스턴스를 가지고 있어서 이것을 통해 화면에 내용을 그린다. view는 화면에 자리하기 위한 논리적인 사각형 범위와 속성들을 가지고, layer는 이 범위를 실제로 화면에 그리는 역할을 수행하는 것으로 분리되어 있다. 그리고 외곽선, 그림자 등 몇가지 렌더링 효과를 쉽게 설정할 수 있게 property를 제공한다. cornerRadius 이 옵션은 모서리의 곡률을 지정한다. 적용해 보기 위해서 화면 구성을 좀 바꾸자. ..
- Total
- Today
- Yesterday
- OS
- 수학
- Spring
- Cocos2d-x
- SOCKET
- Java
- mongoDB
- 운영체제
- rxswift
- 국내여행
- game
- swift
- Git
- ios
- 자료구조
- C
- machine learing
- JSP
- winsock
- DesignPattern
- ue4
- scala
- database
- SwiftUI
- 알고리즘
- C++
- SHADER
- 드라마
- 데이터베이스
- C/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 | 31 |