콘텐츠로 건너뛰기
Home » swift » Page 6

swift

스크롤 뷰 사용하는 방법 – UIScrollView

제한된 크기의 스크린을 가지고 있는 iOS 기기에서 고해상도의 이미지를 보여줄 때는 화면에 맞게 이미지 사이즈를 축소하거나, 화면상에 이미지의 일부만을 표시하면서 스크롤을 통해서 이미지를 탐색하게 한다. 스크롤뷰는 이러한 포토뷰어 등에서 많이 사용되며, 이를 위해 코코아 터치에서는 UIScrollView를 제공한다. UIScrollView는 간단한 코드로도 기본적인 스크롤 뷰 기능을 제공하며, 손쉽게 핀치를 통한 줌인/줌아웃을 지원할 수도 있다. 이 포스트에서는 UIScrollView를 생성하고 추가하는 기본적인 사용에서 핀치를 통한 줌인/줌아웃과 더블 탭을 통한 자동 확대를 어떻게 구현하는지 설명할 것이다.
더 보기 »스크롤 뷰 사용하는 방법 – UIScrollView

Nib 파일로부터 UI 관련 객체를 로딩하기

nib 파일에서 뷰/뷰컨트롤러를 가져오기

UIView를 상속받은 커스텀 뷰를 작성할 때, 뷰의 서브 뷰들을 일일이 동적으로 구성하는 것보다 인터페이스 빌더를 통해서 구성하는 것이 더 편한 경우가 있다. 흔히 테이블 뷰의 셀에 쓰이는 뷰가 이런 식으로 구성하기 좋다.  코드 상으로 모든 뷰의 구성 요소들을 일일이 구성하고 초기화하는 것은 너무 번거로우니, 메인 스토리보드와는 별개의 nib 파일에 뷰를 세팅하고 이를 로드하는 방식으로 좀 더 간결하고 예쁘게 처리할 수 있는 방법이 있을지 고민해보자.더 보기 »Nib 파일로부터 UI 관련 객체를 로딩하기

테이블 뷰에서 드래그하여 재정렬하기 – Cocoa, Swift

도전과제 – 테이블 뷰에서 row를 드래그하여 재정렬해보자.

드래그 앤 드롭의 매커니즘과 구현방법에 대해서 살펴보았었는데, 그렇다면 테이블 뷰에서 드래그 앤 드롭으로 데이터의 순서를 임의의 순서대로 바꿀 수 있는가에 대해서 살펴보자.더 보기 »테이블 뷰에서 드래그하여 재정렬하기 – Cocoa, Swift

UI컨트롤의 활성화여부를 동적으로 결정하는 법 – Cocoa, Swift

NSUserInterfaceValidations 특정한 메뉴 항목이나 버튼, 테이블뷰, 텍스트뷰 및 텍스트 필드등이 특정한 조건에 따라 활성화/비활성화되어야 하는 경우에 이를 처리하는 전략으로는 두 가지 방법이 있다. 특정 조건값이 변경될 때 (변경지점에서, 혹은 옵저빙을 통해서) 관련된 컨트롤의 활성화 여부를 변경해주는 방법 특정 조건값을 계산 프로퍼티로 만든 후, 이를 코코아 바인딩으로 컨트롤의 enabled 키와 연결하는 방법 코코아에서는 이 외에도 컨트롤에 대한 유효성 검사 매커니즘을 별도로 가지고 있다. 컨트롤이 화면에 표시될 때, 해당 컨트롤의 타깃이 NSUserInterfaceValidations 프로토콜을 따르고 있다면 해당 프로토콜의 메소드를 호출하여 자신의 유효성 여부를… 더 보기 »UI컨트롤의 활성화여부를 동적으로 결정하는 법 – Cocoa, Swift

드래그 앤 드롭으로 콘텐츠 복사를 구현하기 – Cocoa, Swift

많은 코코아 관련 서적에서 복사/붙여넣기를 구현하는 다음 과정으로 드래그 앤 드롭을 소개하는데, 대부분이 어떤 이미지 뷰에 이미지를 끌어다 놓는 부분까지만 소개하고 있다. 아마도 드래그 앤 드롭 자체가 실제로는 상당히 복잡한 매커니즘이라 그런 듯 한데, 이번 글에서는 드래그 앤 드롭을 구현하기 위해서 소스 뷰와 타깃 뷰 그리고 전달되는 데이터 모델에 대해 어떤 클래스와 구현이 필요한지를 살펴보도록 하겠다.
더 보기 »드래그 앤 드롭으로 콘텐츠 복사를 구현하기 – Cocoa, Swift

(Cocoa | Swift) 문서기반 앱

NSDocument 코코아에서 도큐먼트 기반 앱은 Pages 등의 프로그램과 같이 단일 문서당 개별 윈도를 갖고 구동되는 앱이다. 이러한 앱은 다음의 특성을 가진다. 한 애플리케이션에서 문서의 개수만큼의 윈도를 열 수 있다. 앱은 여러 문서들을 관리하게 된다. 문서는 문서의 데이터 구조를 관리하며, 이러한 데이터를 표시하는 윈도우를 관리한다. 문서는 디스크에 문서의 데이터를 저장하고, 읽고, 새 문서를 시작하는 기능을 담당한다. 또한 iCloud에 문서를 저장하거나 옮기는 기능도 담당하게 된다. 도큐먼트 기반 앱은 단순한 유틸리티나 슈박스 앱과는 다른 구조를 가지고 있으며, 그만큼 복잡하고 많은 기능들을 제공해야 한다.… 더 보기 »(Cocoa | Swift) 문서기반 앱

복사-붙여넣기가 지원되는 클래스 작성하기 – Cocoa, Swift

복습

이전 시간에 macOS에서 클립보드를 통해서 복사와 붙여넣기를 통해서 뷰 혹은 앱간의 데이터를 교환하는 과정에 대해서 살짝 살펴보았다. 어떤 클래스의 객체가 클립보드로 복사되려면, 해당 클래스는 클립보드에게 어떤 타입의 데이터들을 넣어줄 수 있음을 알리고, 각 타입에 대한 데이터를 생성하여 클립보드에게 전달해주는 동작을 수행해야 하며, 이 동작은 NSPasteboardWriting에 정의되어 있다. 그리고 붙여넣는 시점에 특정한 클래스의 객체를 클립보드에 요청하면, 클립보드는 해당 클래스의 객체를 생성할 수 있는 타입들을 조사한 후, 조달 가능한 타입에 대응하는 데이터를 이용해서 해당 클래스 객체를 생성해 붙여넣는 쪽으로 전달해주게 된다. 즉 클립보드로부터 생성할 수 있는 클래스는, 객체를 생성할 수 있는 데이터의 타입과, 타입별 데이터를 전달받아 인스턴스를 만드는 방법을 알고 있어야 한다. 이 내용은 NSPasteboardReading에 정의된다.

복사/붙여넣기의 동작은 어떤 클래스로부터 이진데이터를 만들어서 클립보드에 올려놓고, 또 클립보드 데이터로부터 어떤 클래스를 만드는 일과 관련된다. 하지만 이것은 직렬화/역직렬화와는 다르다. 왜냐하면 복사/붙여넣기 동작은 앱과 앱 사이에서도 발생할 수 있는 일이기 때문이다. 따라서 데이터 공급과 소비의 관점에서 이해해야 하며, 이 때 오가는 데이터는 1가지 이상의 타입일 수 있다.

보통의 복사/붙여넣기 동작과 관련해서는 특수한 타입의 데이터보다는 일반적인 표준 클래스의 데이터를 더 많이 쓰게되므로 실질적으로 커스텀 클래스를 클립보드에 복사해넣는 일은 그리 많지 않다. 하지만 궁금해하지 말라는 법은 없으니, 복사/붙여넣기를 지원하는 커스텀 클래스를 어떻게 작성할 수 있는지에 대해서 알아보도록 하자. 

더 보기 »복사-붙여넣기가 지원되는 클래스 작성하기 – Cocoa, Swift

NSView의 내용을 PDF로 만들기 (Swift)

뷰로부터 pdf 데이터 얻기 AppKit의 모든 그리기 명령은 PDF로 변환가능하다. 그리고 이렇게 변환된 PDF 데이터는 프린터로 보내지거나 파일에 기록될 수 있다. PDF는 해상도에 의존하지 않기 때문에 어느 기기에서 봐도 제법 괜찮은 품질을 보여준다는 점을 잊지 말자. draw:를 사용해서 뷰를 그리는 것을 할 수 있다면, PDF는 공짜로 얻을 수 있다. 이 방법은 매우 쉬운데 NSView는 다음과 같은 메소드를 가지고 있다. func dataWithPDF(inside: NSRect) -> Data 이 메소드는 draw(:)를 호출해서 이를 통해 그래픽 데이터를 얻는다. 뷰 그리기 명령에서 얻어지는 모든 내역은 화면이… 더 보기 »NSView의 내용을 PDF로 만들기 (Swift)

(Swift | Tutorial) copy and paste 구현해보기

복사/붙여넣기를 지원하기

페이스트보드, 흔히들 클립보드라고 말하는 이 물건은 요즘 컴퓨터를 쓰는 사람들에게는 어찌보면 공기중의 산소와 같은 것이라 하겠다. 거의 모든 컴퓨터 및 스마트기기 사용자들이 의식하지도 않은채 많이 쓰는 기능일 것이다. 복사와 붙여넣기는 사용자 측면에서는 숨쉬는 것처럼 자연스러운 기능이지만,시스템 측면에서는 사실 간단한 동작은 아니다. 복사/붙여넣기는 단순히 앱 내에서 데이터를 이동하는 것 뿐만 아니라 서로 다른 앱 간에 대해서도 이를 통해서 데이터를 전달할 수 있게 된다.더 보기 »(Swift | Tutorial) copy and paste 구현해보기