본문 바로가기

iOS

(41)
iOS) UITableView로 채팅 UI 만들기(1) 생성 UITableView 생성 UITableView를 스토리보드에 추가한다. 그다음 assistant를 열고 컨트롤러에 IBOutlet으로 연결한다. Prototype Cell 생성 우측 상단의 뷰 인스펙터 중 Attributes를 선택 후 Prototype Cells의 수를 필요한 만큼 증가시킨다. 그다음 File-> New-> File...을 선택하여 스토리보드에 생성된 프로토타입 셀에 대한 뷰 파일을 생성한다. Cocoa Touch Class를 선택 후 subclass는 UITableViewCell을 선택한다. 기본적으로 생성한 셀은 커스텀이다. 생성한 후 반드시 테이블 뷰 셀의 identifier를 지정해줘야한다. message에 해당하는 label과 messageBox에 해당하는 UIView를..
iOS) NSCoding과 Archive를 통한 데이터 저장 - (2) enum type archive 처음에 enum 타입을 통으로 encode했더니 에러가 발생하였다. archive할 때 화나는 점이 encode 하거나 decode할 때 따로 확인하지 않으면 에러가 발생하지 않는다는 것이다. unit test를 생활화하자! 아무 에러없이 돌아가서 문제가 있는지 모르다가 멀티 씬을 적용했을 때 데이터가 초기화 되길래 하나씩 살펴보니 enum에서 문제가 있었다. Convert rawValue to enum enum의 rawvalue인 String 타입으로 encode한 다음 decode할 때 해당 스트링에 매칭되는 enum 값을 찾도록 하였다. enum ProcessedType: String { case processed = "processed", lowFatProcesse..
iOS) NSCoding과 Archive를 통한 데이터 저장 - (1) decode 타입 지정 오류 해결 NSCoding과 NSKeyed(Un)Archiver 디바이스를 껐다 켜도 데이터가 영구적으로 남아있도록 하기 위해 직접 만든 클래스가 NSCoding이라는 프로토콜의 정의를 따르도록 했다. 자세하게 알아보지 않고 그냥 사용법만 대충 보고 구현해봤다. NSCoding프로토콜의 정의를 따르기 위해서는 requred init과 encode 메소드를 구현해야 한다. 개인적으로 이해한 바로는 encode가 데이터를 인코딩 하는 것이고 requred init에서는 인코딩된 데이터를 디코딩하여 쓰는 것이라 생각하고 있다. 위의 메소드를 직접 불러서 사용하기 보다는 NSKeyedArchiver와 NSKeyedUnarchiver를 통해 자동으로 불려지는 것 같다. decode 타입 지..
프로그래밍 방법론) 객체지향프로그래밍(OOP) - (3) 상속과 다형성 객체지향프로그래밍의 특징으로 크게 캡슐화, 은닉화, 추상화, 상속, 다형성이 있습니다. 그 중 상속과 다형성에 대해 알아볼까 합니다. 상속 기존 클래스를 재사용하여 새로운 클래스를 작성하는 것 상속을 통해 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이합니다. 장점 코드 재사용성 코드 중복 제거 프로그램 생산성과 유지보수 향상 오버라이딩 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야 하는 경우에 사용한다. 오버라이딩 조건 자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와 다음의 조건이 같아야 ..
프로그래밍 방법론) 객체지향프로그래밍(OOP) - (2) 객체 비교 객체간의 비교 - 기본 == 기본적으로 객체를 비교할 때 값이 아닌 레퍼런스를 비교합니다. 따라서 a와 b는 같은 값을 가지고 있지만 서로 다른 것으로 나타납니다. a와 c는 같은 값을 참조하고 있으므로 같다고 간주합니다. class Car : NSObject { var horsePower : Int var plate : String init(power: Int, id: String) { horsePower = power plate = id } } let a = Car(power: 200, id: "AX993JE") let b = Car(power: 200, id: "AX993JE") let c = a print(a == b) //
프로그래밍 방법론) 객체지향프로그래밍(OOP) - (1) 객체란? 객체 지향 프로그래밍에서 인스턴스는 해당 클래스의 구조로 컴퓨터 저장공간에서 할당된 실체를 의미한다. 여기서 클래스는 속성과 행위로 구성된 일종의 설계도이다. OOP에서 객체는 클래스와 인스턴스를 포함한 개념이다. 출처: wikipedia 객체지향프로그래밍에서 객체란 무엇인가를 고민하면 떠오르는 용어가 세 가지 있습니다. 바로 클래스, 오브젝트, 인스턴스 입니다. 위 인스턴스의 정의에서처럼 세 가지 개념은 서로 연관되어 있습니다. 각 용어에 대해 더 자세히 알아보자면 다음과 같습니다. Object 실제로 존재하는 것 객체지향이론의 기본 개념은 '실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다.'라는 것입니다. 객체란 실제 세계에서 처럼 실제 사물의 속성과..
iOS) 레이아웃(1) - 인터페이스 빌더 1. 씬의 변화 씬이 변화되는 경우 기기의 회전 다른 화면 크기/배율의 기기에서 동작 동적인 씬 레이아웃 변화 기기의 회전 시뮬레이터 -> 하드웨어 -> 로테이트 메뉴 에서 기기를 회전시킬 수 있다. 프로젝트 내 회전 방향을 설정하여 해당 방향으로 회전됐을 때 화면이 자동으로 돌아가게 할 수 있다. 프레임 기반의 레이아웃 뷰의 프레임은 뷰의 좌표(x,y), 뷰의 크기(width, height)로 나타낸다. 이는 씬의 변화에 관계없이 고정된 값이다. 따라서 씬에 변화가 발생했을 때 적절히 대처하지 못한다. 2. 제약조건 기반의 레이아웃 제약조건은 뷰의 위치와 크기에 대한 제약조건이다. 동적으로 해석되서 프레임에 반영된다. 씬에 변화가 발생했을 때 제약조건에 의해 다시 새로운 좌표와 크기를 잡아서 적용된다...
iOS) Scene(4) - 코드로 뷰 제어 코드로 뷰 제어 뷰 구조 생성 이후 뷰 제어하기 앱 동작 중 컨텐츠 변경 런타임 시 뷰 구조 변경 코드로 작성한 뷰 제어 class Viewcontroller: UIViewController { var redView: UIView! override func viewDidAppear(animated: Bool) { redView.backgroundColor = UIColor.gray } override func viewDidLoad() { redView = UIView(frame: frame) self.view.addSubview(redView) } } 뷰의 태그로 접근 각 뷰마다 tag라는 프로퍼티가 있는데 이는 일종의 일련번호이다. 이 태그로 접근할 수 있다. 기본값은 0이므로 태그를 사용하기 위해서는..
iOS) Scene(3) - 코드로 씬 작성 씬 작성에 관련된 클래스 1. 뷰 컨트롤러 UIViewController를 상속받는 뷰 컨트롤러이다. 뷰 컨트롤러 안에 씬에 대한 구성을 하는 코드 작성한다. 우선 콘텐츠 출력에 맞는 뷰를 선택해서 뷰에 대한 객체 생성하고 뷰 객체의 속성을 이용해서 화면상에 어떻게 나타날지 작성한다. 뷰 컨트롤러 안에 들어가는 코드는 다음과 같다. 뷰를 이용해서 컨텐츠 출력 코드 컨트롤에서 발생한 이벤트를 다루는 코드 뷰 구조 작성 코드 씬의 생명주기 뷰 컨트롤러가 하는 가장 중요한 것 중 하나는 씬에 대한 생명주기를 관리하는 것이다. 우리가 ios 애플리케이션을 만들게 되면 화면 단위 즉 씬을 여러 개 만들게 되는데 그 씬 사이에 전환이 발생하게 된다. 각 순간에 동작하는 라이프사이클 메서드가 정의되어 있다. // 씬..
iOS) Scene(2) - 인터페이스 빌더로 씬 작성 인터페이스 빌더로 씬 작성 뷰를 이용한 씬 작성 뷰란? 씬의 콘텐츠 출력 씬을 작성할 때 씬은 씬에 속한 뷰를 이용하여 화면에 나타낸다. 뷰의 가장 기본적인 역할은 콘텐츠 출력이다. 콘텐츠 종류에 맞는 뷰 UIKit은 여러 개의 뷰를 제공하는데 자신이 출력하고자 하는 콘텐츠의 종류에 맞는 뷰 하나를 선택해야 한다. 예를 들어 글자를 출력해야 하면 글자를 출력하는 기능을 제공해주는 뷰를 사용해야 한다. 이미지를 출력해야 하면 이미지를 출력할 수 있는 기능을 제공하는 뷰를 사용해야 한다. 뷰 작성과 속성 이렇듯 컨텐츠 종류에 맞는 뷰를 선택하고 그다음 뷰를 작성하고 속성 값을 넣어준다. 화면상에 나타나기 위해서는 씬에 대한 뷰 구조에 추가해주는 과정을 거쳐야 한다. 뷰 구조 씬에 뷰를 배치할 경우 자동으로 ..