단순 리스트를 보여주는 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)에 추..
프로그래밍을 하면서 항상 부딪히는 주제이고, 어려운 주제인... 동시성 프로그래밍, 비동기 프로그래밍에 대해서 정리해보고자 합니다. 먼저 필요한 기본 개념들을 하나씩 짚어보고 갈게요..! 프로세서, 코어, 프로그램과 프로세스, 스레드 프로세서 프로그램을 수행하는 하드웨어 유닛 멀티 프로세서 : 한 컴퓨터가 여러 개의 프로세서를 갖는것. (듀얼 프로세서 : 2개의 프로세서) ex) CPU 코어 프로세서의 주요 연산회로 싱글코어, 듀얼코어 : 연산회로의 갯수 여러 개의 코어를 갖는 프로세서 또한 멀티 프로세서 프로그램, 프로세스 프로그램 : 보조기억 장치에 저장된 실행코드, active하지 않은 상태 프로세스 : 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위, acti..
iOS 개발을 하다보면 자연스레 갤러리에 접근하는 일이 많아집니다. 그래서 이번엔 iOS 에서 iCloud 사진 라이브러리를 포함하여 사진 및 비디오에 직접 접근,편집할 수 있는 프레임워크 Photos 에 대해서 알아보겠습니돠 먼저 Photos프레임워크에서 객체를 지칭하는 방식을 살펴보겠습니다 . Asset < Asset Collection < Collection List Asset Asset Collection Collection List 각각의 모델 클래스(PHAsset, PHAssetCollection, PHCollectionList)의 인스턴스를 통해 작업하려는 항목에 접근할 수 있습니다. 가져오기 메스드에서 반환된 에셋 또는 컬렉션의 목록을 받을 수 있습니다. (PHFetchResult) 받아온..
Codable 인스턴스를 다른 데이터 형태로 변환하고 그 반대의 역할을 수행하는 방법을 제공합니다. 스위프트의 인스턴스를 다른 데이터 형태로 변환할 수 있는 기능을 Encodable 프로토콜로 표현하였고, 그 반대의 역할을 할 수 있는 기능을 Decodable로 표현해 두었습니다. 그 둘을 합한 타입을 Codable로 정의해 두었습니다. .. 왔? 일단 안을 들여다 보면 두 프로토콜 Decodable, Encodable 을 동시 채택하는 프로토콜... 입니다. 일단 Encoding, Decoding 용어에 대해서 먼저 살펴보겠습니다. 불라불라를 스위프트 타입의 인스턴스로 변환해 주는 것이 Decoding, 그 반대가 Encoding 입니다. 일단 예제를 통해 확인해 보지요 struct Student: C..
전 포스팅에서 화면전환에 대해서 살짝 다뤘었는데요 (모달 present, 네비게이션 push) 이번 포스팅에서도 화면전환에 대해서 다루려고 합니다 ! Segue (세그) Segue는 스토리보드에서 뷰 컨트롤러 사이의 화면전환을 위해 사용하는 객체입니다. 기존에 제가 보였드렸던 방식은 거의 코드로 (present, push) 했었는데 Segue의 경우 별도의 코드 없이도 스토리보드에서 세그를 연결하여 뷰 컨트롤러 사이의 화면전환을 구현할 수 있습니다. UIStoryboardSegue Class UIStoryboardSegue 클래스는 UIKit에서 사용할 수 있는 표준 화면전환을 위한 프로퍼티와 메서드를 포함하고 있습니다. UIViewController의 performSegue(withIdentifier:..
이번 포스팅에서는 셀의 재사용을 알아보고 또 다시 UITableView 를 이리저리 가지고 노는 실습을 진행해 보겠습니다. 뷰의 재사용 iOS 환경에서 뷰를 재사용하는 애들은 대표적으로 저희가 다룰 UITableView와 UICollectionView 가 있습니다. 작동 방식 테이블뷰 및 컬렉션뷰에서 셀을 표시하기 위해 데이터 소스에 뷰(셀) 인스턴스를 요청합니다. 데이터 소스는 요청마다 새로운 셀을 만드는 대신 재사용 큐 (Reuse Queue)에 재사용을 위해 대기하고있는 셀이 있는지 확인 후 있으면 그 셀에 새로운 데이터를 설정하고, 없으면 새로운 셀을 생성합니다. 테이블뷰 및 컬렉션뷰는 데이터 소스가 셀을 반환하면 화면에 표시합니다. 사용자가 스크롤을 하게 되면 일부 셀들이 화면 밖으로 사라지면서..
이론을 어느 정도 톺아 보았으니 테이블 뷰를 이리 저리 마구 잡이로 가지고 놀아 보겠습니다. 포켓몬 도감? 만들기 ... 네 도감을 만들어 보려 합니다 ㅎㅅㅎ 구성 UITableView 셀 추가 버튼 3개 (오박사, 메타몽, 꼬부기) DoctorCell (오박사), MonsterCell (메타몽, 꼬부기) 동작 버튼에 따라 서로 다른 Cell이 추가됩니다 editing 모드로 cell 삭제를 합니다 먼저 사용될 UIViewController에 UITableView를 뷰전체 사이즈로 추가합니다. UITableViewCell 하나를 추가한 뒤 Style을 Basic으로, Identifier를 "DoctorCell"로 지정해줍니다. UITableView안에 Stack뷰를 하나 추가한 뒤 3개의 버튼을 추가해줍..