상당히 메모리 제약이 큰 모바일 어플리케이션 환경에서 멀티 프로세싱은 필수적입니다. 하지만 그에 대한 관리를 하는 것은 정말 어려운데요... 그래서 GCD 애플에서 개발한 멀티코어, 멀티 프로세싱 환경에 최적화된 기술입니다. 기본적으로 스레드 풀의 관리를 프로그래머가 아닌 운영체제에서 관리하기 때문에 프로그래머가 태스크(작업)을 비동기적으로 쉽게 사용할 수 있습니다. 프로그래머가 실행할 태스크(작업)을 생성하고 Dispatch Queue에 추가하면 GCD는 태스크(작업)에 맞는 스레드를 자동으로 생성해서 실행하고 작업이 종료되면 해당 스레드를 제거합니다. Dispatch Queue DispatchQueue는 작업항목의 실행을 관리하는 클래스입니다. 대기열(Queue)에 추가된 작업항목은 시스템이 관리하는..
iOS 내에서 HTTP/HTTPS 를 통해 데이터를 주고받기 위해 API를 제공하는 URLSession과 이 작업을 나타내는 URLSessionDataTask에 대해서 톺아보겠습니다. URLSession URLSession은 HTTP/HTTPS를 통해 콘텐츠(데이터)를 주고받는 API를 제공하는 클래스입니다. 이 API는 인증 지원을 위한 많은 델리게이트 메서드를 제공하며, 애플리케이션이 실행 중이지 않거나 일시 중단된 동안 백그라운드 작업을 통해 콘텐츠를 다운로드하는 것을 수행하기도 합니다. URLSession API를 사용하기 위해 애플리케이션은 세션을 생성합니다. 해당 세션은 관련된 데이터 전송작업 그룹을 조정합니다. 예를 들면 웹 브라우저를 사용 중인 경우 탭 당 하나의 세션을 만들 수 있습니다...
요즘 앱들을 보면 iOS 뿐만 아니라 AOS 까지 거의 다 하단에 탭이 있는 Tabbar로 페이지를 구분하는 형태가 많습니다. 폰이 길어져서 그런다~ 사용자 UX가 좋다 등 결국 사용자가 편하다 라는 이유로 점점 더 대중화되고 있습니다. iPhone 기본앱들도 거의 다 사용하는 이 Tabbar 를 톺아보도록 하겠습니다. 탭바 컨트롤러가 존재하고 UIViewController를 탭바 컨트롤러에 연결함으로써 페이지를 추가할 수 있습니다. 바로 구현으로 들어가 볼게요 :) UIViewController에 Tab bar Controller를 임베디드 시켜 줍니다. 요렇게 선택한 UIViewController가 하나의 tab으로 설정된 Tab bar Controller가 생성됩니다. storyboard 에 UIV..
드디어 예제를 가지고 왔습니다 !! Example) 포켓몬 도감 2 !! 설명이 길 수 있어서 세세한 부분은 좀 생략을 했습니다 잘 따라와주세요 ! 먼저 스토리보드에 UICollectionView를 뷰 전체 사이즈로 추가해 주시구요. ViewController에 레퍼런스를 따옵니다. (IBOutlet weak var ...) //ViewController.swift private var pokemons: [UIImage] { var pokemons:[UIImage] = [] for i in 0...50 { let index = i % 16 let image = UIImage(named: "pokemon\(index)")! pokemons.append(image) } return pokemons } 미리 ..
이전 시간에 UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate에 대해서 알아보았구 이번 포스팅에서는 컬렉션뷰의 셀을 원하는 형태로 정렬하고 간격을 지정하는 등의 기능을 하는 UICollectionViewFlowLayout에 대해서 알아보겠습니다. 예제는 다음..에 있어요 ㅎㅎ UICollectionViewFlowLayout UICollectionViewFlowLayout 클래스를 사용하면 컬렉션뷰의 셀을 원하는 형태로 정렬할 수 있습니다. 플로우 레이아웃은 레이아웃 객체가 셀을 선형 경로에 배치하고 최대한 이 행을 따라 많은 셀을 채우는것을 의미합니다. 현재 행에서 레이아웃 객체의 공간이 부족하면 새로운 행을 생성하고 거..
이전에서 UICollectionView의 구성요소와 레이아웃, 구현을 위한 클래스, 프로토콜을 톺아보았습니다 ;) 이번에는 UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate에 대해서 알아보겠숩니다. 예제는 다음다음시간에... UICollectionViewCell 컬렉션뷰 셀의 구성요소 관련 프로퍼티 //셀의 콘텐츠를 표시하는 뷰입니다. var contentView: UIView /*셀의 배경을 나타내는 뷰입니다. 이 프로퍼티는 셀이 처음 로드되었을 경우와 셀이 강조 표시되지 않거나 선택되지 않을 때 항상 기본 배경의 역할을 합니다.*/ var backgroundView: UIView? /*셀이 선택되었을 때 배경뷰 위에 ..
단순 리스트를 보여주는 UITableView 이외에 UICollectionView 는 변경가능하고 유연한 레이아웃을 사용하여 다양한 레이아웃을 보여줄 때 많이 활용됩니다. 컬렉션뷰의 구성요소 셀(cell) 컬렉션뷰의 주요 콘텐츠를 표시합니다. 컬렉션뷰는 컬렉션뷰 데이터 소스 객체에서 표시할 셀에 대한 정보를 가져옵니다. 각 셀은 UICollectionViewCell 클래스의 인스턴스 또는 UICollectionViewCell을 상속받은 클래스의 인스턴스입니다. 보충 뷰(Supplementary views) 섹션에 대한 정보를 표시합니다. 셀과 달리 보충 뷰는 필수는 아니며, 사용법과 배치 방식은 사용되는 레이아웃 객체가 제어합니다. 헤더와 푸터를 예로 들 수 있습니다. 데코레이션 뷰(Decoration ..
내비게이션 바의 콘텐츠를 표시하는 객체가 되는 것이 Navigation Item입니다. 페이지가 전환될 때마다 내이게이션바는 하나의 공동객체지만. Navigation Item은 각각의 뷰 컨트롤러가 가지고 있는 프로퍼티입니다. 위 처럼 내비게이션바는 내비게이션 컨트롤러에 종속되지만, 내비게이션 아이템은 해당 뷰 컨트롤러에 종속됩니다. 이 내비게이션 아이템은 BarButtonItem으로 구현이 되는데 이는 UIToolbar의 Item에도 똑같이 적용됩니다. 바 버튼 아이템에는 활용하기 좋은 스타일들이 많이 있습니다. 바 버튼 아이템의 Attribute Inspector 에서 SystemItem을 클릭하면 다양한 스타일을 지정할 수 있습니다. 주요 상수 UIBarButtonItem.Style : 아이템 스타..
스크롤뷰 스크롤뷰 안에 포함된 뷰를 상,하,좌,우로 스크롤 할 수 있고 확대 및 축소할 수 있습니다. 이를 상속받아 활용되는 뷰가 UITableView, UICollectionView, UITextView 등이 있고 주로 사진 확대 축소할때 많이 사용합니다. 다양한 기능을 가진 만큼 정말 다양한 프로퍼티와 메서드가 있는데요. 쭉~ 나열해보고 사진 확대 예시로 넘어가겠습니다. 콘텐츠 크기 및 오프셋 관리 //콘텐츠뷰의 크기 var contentSize: CGSize { get set } //콘텐츠뷰의 원점이 스크롤뷰의 원점에서 오프셋 된 지점 var contentOffset: CGPoint { get set } //스크롤뷰의 원점에 대한 콘텐츠뷰의 오프셋 설정. func setContentOffset(_ ..
OperationQueue 란, 동시성(Concurrecny) 프로그래밍 을 위해 iOS 환경에서 지원하는 라이브러리 입니다. 동시성(Concurrecny) 프로그래밍에 대한 자세한 설명은 동시성, 비동기 프로그래밍 톺아보기 에서 확인해 주세요 ㅎㅂㅎ OperationQueue 이름을 살펴보면 Opertaion + Queue 인데, 말 그대로 대기열(Queue)에 추가한 동작(Operation) 의 실행을 관리하는 추상 클래스입니다. 동작에는 연산 객체(Operation Object)가 들어가게 되고, 이는 Foundation 프레임워크의 Operation 클래스 인스턴스입니다. 대기열(Queue)에서 동작(Operation) 관리 //연산 객체(Operation Object)를 대기열(Queue)에 추..