일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 안드로이드 스튜디오
- 테이블_레이아웃
- 스낵바
- 리니어 레이아웃
- 부스트코스
- 제약 레이아웃
- 상대 레이아웃
- edwith
- 액션바
- 드로어블
- 코틀린
- 데이터베이스
- SceneDelegate
- 안드로이드_프로그래밍
- RecyclerView
- IOS
- 아이폰
- 텍스트뷰 스크롤
- Swift
- 텍스트뷰 자동 스크롤
- 코드리뷰
- 프로젝트
- textview auto scroll
- 안드로이드
- 레이아웃
- 서비스
- 뷰
- 프로그래밍
- 수명주기
- 자바
- Today
- Total
목록전체 글 (48)
듀다의 성장개발로그
지난 포스팅에서는 SceneDelegate가 포함된 앱 생명주기에 대해 알아봤었는데요 그러면 기존 AppDelegate만 사용하던 방식과는 어떻게 달라진 것인지 살펴보겠습니다. 그런데 SceneDelegate는 왜 등장하게 되었을까요? iOS12까지의 앱은 한 앱에서 한 화면밖에 보여줄 수 없었지만 iOS13부터는 여러 화면을 동시에 보여주는 기능을 지원하게 됩니다. 이런 기능을 지원하기 위해선 하나의 앱에서도 여러 개의 Scene을 가질 수 있어야 했기 때문에 Scene을 관리하는 SceneDelegate가 새로 등장하게 된 것이지요. iOS 12까지 사용하던 기존의 생명주기는 위와 같은 그림으로 나타낼 수 있습니다. 현재의 scene-based 방식과 차이점은 앱의 상태에 따라 UI가 변한다는 것입니..
Xcode 상에 무언가를 보여주는 데만 집중하다 보니 기초적인 내용에 대한 이해가 부족한 것 같아 오늘은 앱을 이해하는 데 가장 기초가 되는 앱 생명주기에 대한 내용을 가져와봤습니다. 검색해서 나오는 글은 AppDelegate를 이미 알고 있다고 가정하고 SceneDelegate와의 차이점을 설명하거나 AppDelegate만 있었던 버전을 기준으로 앱 생명주기를 설명하는 글이 대부분이라 저는 SceneDelegate가 포함된 버전을 기준으로 앱 생명주기를 처음부터 설명하도록 하겠습니다. iOS 13이후의 scene-based 앱에선 각 생명주기의 이벤트를 처리하는 데 UISceneDelegate 객체를 사용합니다. 위 그림에서 점선은 시스템, 점선은 유저가 수행하는 동작입니다. 사용자가 앱에 새로운 sc..
우리가 앱을 사용할 때, 같은 UI지만 다른 데이터소스에서 데이터를 받아 표시해야 하는 경우가 생길 수 있습니다. 수강신청 정보 앱을 예로 들면, 교양 과목 조회 화면에서 현재 표시된 것과 다른 영역의 교양 과목 정보를 보고자 할 때, DB의 다른 조회 결과를 가지고 표시를 해주어야겠죠? 다른 데이터소스를 받아오기 위해, 그리고 테이블뷰의 내용을 좀 더 쉽게 변경하기 위해 지난 시간의 예제를 RxDataSources를 써서 수정해보도록 하겠습니다. pod 'RxDataSources' 우선 RxDataSources를 설치해야 합니다. 테이블뷰의 내용을 변경할 수 있게 하려면 유저가 누를 버튼이 있어야겠죠? Main.storyboard에서 테이블뷰 아래에 버튼을 하나 만들어 줍니다. import Founda..
지난 시간에 이어 비동기 작업에 대해 설명하겠습니다. 결과를 기다렸다가 나중에 결과 데이터가 오면 처리하는 상황을 예로 들었죠? 식당에 대한 정보를 JSON으로 받아서 처리하는 예제를 직접 구현하면서 알아보겠습니다. 이 포스팅에 실린 예제는 하단 링크의 강의 내용을 바탕으로 작성되었습니다. 우선 RxSwift를 사용하기 위해선 해당 라이브러리를 설치해주셔야 합니다. Podfile에 아래와 같은 코드를 추가하고 터미널에서 pod install을 입력하여 설치합니다. pod 'RxSwift' pod 'RxCocoa' 영상에서는 Coordinator를 결합한 MVVM-C 패턴을 사용했지만 여기서는 Coordinator 없이 구현하고 Coordinator에 대해서는 다른 포스팅에서 설명드리도록 하겠습니다. 스토..
앱에서 몇 가지 동작을 동시에 처리하는 경우, 요청과 결과가 동시에 일어날 수도 있고 요청한 그 자리에서 결과가 일어나지 않을 수도 있습니다.이 중 요청과 결과가 동시에 이루어지지 않는 작업을 '비동기 작업'이라고 하는데요,Swift에서는 비동기 작업 처리를 위해 DispatchQueue.async를 활용할 수 있습니다. 실행하려는 비동기 작업이 무조건 메인 스레드에서 동작하게 하려면 DispatchQueue.main.async를 활용할 수 있습니다. DispatchQueue.main.async { //anything you want } 우선순위에 따라 백그라운드에서 동작하게 하고 싶을 때는 DispatchQueue.global()을 활용할 수 있습니다.DispatchQueue.global().async..
Frame과 Bounds의 역할은 UIView의 instance property(객체 내부에서 사용하는 변수 속성)입니다. 객체의 어떤 정보를 나타내는 좌표(x,y), 너비, 높이 값 등을 갖는 멤버 변수라는 뜻으로 즉 Frame과 Bound는 변수입니다. Frame과 Bounds의 차이점에 대해 이야기하면, Frame은 SuperView를 기준으로 좌표를 표시하지만 Bounds는 자기 자신을 기준으로 좌표를 표시합니다. 여기서 SuperView란? 뷰 안에는 뷰를 담을 수 있습니다. 이 경우 뷰는 어떤 상위 뷰에 속한 상태로 존재하게 되며, 안의 뷰는 자식 뷰, 자식 뷰를 담고 있는 뷰는 부모 뷰라고 부릅니다. 이때의 '부모 뷰'를 SuperView라고 합니다. Frame과 Bounds에서의 좌표란? ..
iKU - 수강신청을 도와주는 아이폰 앱 안드로이드에는 수강신청 빈 자리를 알려주는 앱이 있는데 왜 아이폰에는 없을까? 2019년 원쿠라는 앱이 처음 나오고부터 이런 생각을 하는 사람이 많았지만 그런 앱은 아이폰에 나오지 않았다. 이걸 내가 만들면 아이폰 쓰는 학우들에게 도움도 되고, 앱 개발자로서의 첫 단추를 잘 끼울 수 있지 않을까 하는 생각을 했다. 앱스토어에 앱을 올리려면 뭐가 필요한지 처음부터 차근차근 준비했다. Mac OS 우선 맥이 없으니까 커스텀맥으로 개발을 하고자 했다. USB를 사고 데스크탑에 설치를 하려 했다. 그러나 내가 쓰는 데스크탑은 Mac과 호환이 되지 않는 메인보드라 작동을 보장할 수 없었고, 제대로 돌리려면 모든 부품을 호환되는 것으로만 맞춰야 했다. 구형 컴퓨터에 돈 쓰는..
텍스트뷰가 위의 TextView만큼의 공간을 화면에서 차지한다면 이 텍스트뷰보다 많은 라인의 텍스트가 들어가면 한 화면에서 다 표시할 수 없게 됩니다. 그럴 때는 스크롤을 넣어 주면 보이지 않는 텍스트는 스크롤을 하며 볼 수 있습니다. textView.movementMethod = ScrollingMovementMethod.getInstance() 그러나 스크롤 기능을 넣어도 한 줄 추가될 때마다 자동으로 스크롤이 내려가진 않는데요, 아래와 같은 코드를 작성해주시면 자동으로 스크롤되는 텍스트뷰를 만들 수 있습니다. textView.post { val scrollAmount = textView.layout.getLineTop(textView.lineCount) - textView.height if (scr..