iOS 27

iOS) TableView, CollectionView의 변화를 처리하는 방법

들어가며 TableView와 CollectionView는 거의 뭐 운명공동체라고 봐도 무방 할 만큼 정말 많이 사용되는 녀석들입니다..! 그래서 우리는 개발을 하다보면 TV, CV의 내부 데이터들이 추가되고 삭제되어 뷰가 변경되는 일이 자주 발생하죠 오늘은 별 생각 없이 reloadData()만 사용하던 제 자신을 반성하며 언제, 어떤 메소드를 사용해야 가장 좋은 것인지! TableView, CollectionView의 변화을 처리하는 방법에 대해서 알아보도록 하겠습니다! 제가 알아 볼 메소드들을 크게 분류하면 다음 3가지 입니다. 1. reloadData() 2. beginUpdates(), endUpdates() - table view 3. performBatchUpdates(_:completion:..

iOS 2021.05.05

iOS) CALayer, UIView에서의 Layer객체

iOS에서 Graphic 요소들을 그려내기 위해 존재하는 것들 Core Graphics 에서 UIKit 으로 갈 수록 간편해지고 코드량도 줄었지만 사용할 수 있는 기능은 제한된다. 반면 저수준의 프래임워크는 보다 많은 기능을 사용할 수 있지만 UIKit, AppKit 에서 기본적으로 제공하는 기능들을 직접 구현해야하는 경우가 생긴다 가운데 보이는 OpenGL은 iOS 디바이스의 Graphics Hardware와 가장 빠르고 직접적인 접근을 지원한다. 하지만 그만큼 간단한 작업조차 굉장히 많은 양의 코드를 필요로 하기 때문에 효율성이 떨어진다. 비효율적인 OpenGL을 보완하기 위해 Core Graphics와 Core Animation이 존재한다. Core Animation이 제공하는 요소 중 오늘의 주제..

iOS 2021.04.08

iOS) NotificationCenter

Apple 공식 문서에 따르면 NotificationCenter란 등록된 observer에게 정보를 전송할 수 있게 해주는 notification(알림) 전송 방법이라고 한다. NotificationCenter는 Delegate Pattern과 함께 어플리케이션 내에서 객체가 서로 상호작용할 수 있는 방법 중 하나이다. NotificationCenter의 동작 방식 특정 객체가 NotificationCenter에 등록된 Event를 발생시키면, NotificationCennter에 등록된 Observer들 중 해당 Event를 담당 중인 Observer가 그 Event에 대한 행동을 취하는 것(#selector)이 NotificationCenter가 동작하는 방식이다. 어떻게 활용할 수 있을까? 동작방식..

iOS 2021.04.08

iOS) App Life Cycle

App Life Cycle이란 앱이 fore ground 또는 back ground에있을 때 시스템 알림에 응답하고 시스템이 발생시키는 Event에 의해 App의 상태가 전환되는 일련의 과정을 말한다. 참고: fore ground / back ground에 있을 때의 제약사항에 대한 이전 포스팅 App Life Cycle은 다음과 같이 총 다섯 가지의 상태로 이루어져 있다. 1. Not Running 앱이 아직 실행되지 않았거나, 완전히 종료되어 동작하지 않는 상태. 2-1. Fore ground-Inactive 앱이 실행중이지만 사용자로부터 event를 받을 수 없는 상태. multitasking window로 진입하거나 앱 실행중 알림 등에 의해 사용할 수 없게 되는 경우 이 상태로 진입. iOS 1..

iOS 2021.04.08

iOS) AppDelegate, SceneDelegate

iOS13부터 AppDelegate는 AppDelegate와 SceneDelegate로 분기되었다. 오늘은 분기된 이후의 각자 맡은 일과 동작방식 및 순서에 대해 알아보려고 한다. iOS13부터 AppDelegate가 하는 일? 이전에는 앱이 foreground에 들어가거나 background로 이동할 때 앱의 상태를 업데이트하는 등의 앱의 주요 생명 주기 이벤트를 관리했었지만 SceneDelegate로 위임되면서 현재 하는 일은 이하 5가지이다. 앱의 가장 중요한 데이터 구조를 초기화하는 것 앱의 scene을 환경설정(Configuration)하는 것 앱 밖에서 발생한 알림(배터리 부족, 다운로드 완료 등)에 대응하는 것 특정한 scenes, views, view controllers에 한정되지 않고 ..

iOS 2021.04.08

iOS) 앱이 foreground/background에 있을 때의 제약사항

foreground / background status? foreground 상태의 앱은 사용자가 보고 있는 화면이다. 그렇기 때문에 CPU를 비롯한 시스템 자원의 우선순위가 높은 상태! background 상태란 앱이 홈화면에 들어가서 사용자한테 보이지 않는 상태이다. 하지만 background에 진입했다는게 앱이 실행중이지 않다는 의미는 아니다! 음악 앱을 이용하여 노래를 듣는 경우처럼 다른 어플을 사용하더라도 멈추면 안되는 앱들의 경우처럼 앱이 background 상태가 되어도 계속 실행해야 될 때가 존재한다. App State(앱 상태) Not running: 앱이 아예 실행되지 않았거나 시스템에 의해 종료되었을 때의 상황 Inactive: 앱이 foreground 상태이기는 하나 이벤트를 받지 ..

iOS 2021.04.06

iOS) Bounds, Frame의 차이

필요한 사전 지식 CGPoint, CGSize, CGRect CGRect는 "사각형"으로 그려지며, origin과 size를 가진다. 즉, [x좌표, y좌표, width(너비), height(높이)]를 가진다. Bounds, Frame의 차이 //MARK: -frame //SupeView(상위뷰)의 좌표시스템 안에서 View의 위치와 크기를 나타냄 open var frame: CGRect //MARK: -bounds //View의 위치와 크기를 자신만의 좌표시스템 안에서 나타냄 open var bounds: CGRect frame SupeView(상위뷰)의 좌표시스템 안에서 View의 위치와 크기를 나타냄 log를 보면 하늘색 sub view의 frame은 (x:30, y:191) 이고, 보라색 sub ..

iOS 2021.04.06

iOS) IBAction 내장된 Action들을 살펴보자

들어가며 회원가입 화면을 만들면서 비밀번호 입력부에 Secure Text Entry를 적용하였는데, 아래와 같이 눈 모양 버튼을 통해 Secure Text Entry를 해제하고 활성화시킬 수 있게 하는 것이 목표였다. 나는 Keep Pressed 되었을 때에만 입력된 비밀번호를 보여주고 터치가 해제되었을 때에는 다시 Dot으로 돌리고 싶었고 그래서 내장 Action들을 찾아서 해결하였다. 평소 모르던 Action들도 많았기 때문에 이참에 DId End On Exit부터 Value Change까지 15가지의 Action들을 살펴보고자 한다. 본론 Storyboard에서 IBAction(Interface Builder Action)을 만들려고 하면 나오는 왼쪽 화면 Touch Up Inside가 선택되어있는..

iOS 2021.03.07

iOS) FSCalendar의 속성 톺아보기(커스텀)

FSCalendar는 사용하는 사람들이 많은 만큼 사용하는 방법도 잘 나와있어 그 편리성 또한 장점중에 하나 인데요! 그걸 그대로 사용하면 좋지만 어느정도 입맛에 맞게 커스텀을 하려면 그래도 속성값에 대해서 정리되어있는? 곳이 있으면 좋겠더라구요 그래서 이번에 서비스 개발을 하면서 캘린더 커스텀을 할 때 공부했던 정보들을 공유하려 합니다. 기본적인 FSCalendar에서 바꿀 수 있는 속성들 func calendarStyle(){ //언어 한국어로 변경 calendarOrigin.locale = Locale(identifier: "ko_KR") //MARK: -상단 헤더 뷰 관련 calendarOrigin.headerHeight = 66 // YYYY년 M월 표시부 영역 높이 calendarOrigin...

iOS 2021.02.21

iOS) ViewController Life Cycle

오늘은 iOS개발을 하면 할수록 굉장히 중요한 개념이라는 것을 느끼게 해주는 뷰의 생명주기에 대해 알아보겠습니다. App이 실행되면서 여러 event들에 의해 화면이 나오고 사라지는데, 이 과정 속에서 ViewController는 자신들만의 생명주기를 갖습니다. 개인적으로 중요하다고 생각한 부분은 하이라이팅 하였습니다! 1. init(coder:) storyboard 를 통해 View Controller들을 만들 경우 View Controller의 객체가 생성될 때 초기화 작업을 하는 메소드. 이 메소드에서 초기화 작업을 할 때 View Controller들은 그들의 lifetime동안 필요한 자원들을 할당받게 된다. 아직 이 시점에서는 View Controller의 View가 생성된 것이 아니기 때문에..

iOS 2021.02.14