트랙킹 캔버스 뷰 만들기 (Cocoa)

예전에 코어 그래픽을 사용해서 UIView위에 손가락으로 그림을 그릴 수 있는 간단한 핑거 드로잉 캔버스를 구현해본 바 있는데, 똑같은 내용을 NSView에 적용해보고자 한다. 이전글이 Objective-C로 작성되어 있는데, 이번에는 Swift로 간단하게 작성해보려 한다. 원리는 동일하다. CGLayer를 하나 만들고, 마우스를 사용해서 뷰를 긁을 때(드래그할 때)마다  코어 그래픽을 사용해서 레이어에 그림을 그리고, 다시 뷰 리드로잉 사이클에서는 뷰에 레이어를 그리는

프로퍼티 상속 파고들기 – Swift

프로퍼티에 대한 이야기를 몇 번 하긴하였는데, 실제로 프로퍼티 상속은 실제로 상당히 오묘하게 헷갈릴 수 있는 여지가 많아서 다시 한 번 정리하는 차원에서 예제와 함께 포스팅한다. 이 글에서는 클래스의 프로퍼티가 서브클래싱할 때 어떤식으로 처리되는지를 살펴볼 것이다. 먼저 저장 프로퍼티와 계산 프로퍼티에 대해서 살펴보자. 다음 예제 코드는 정수형 프로퍼티 4개를 가지고 있는 클래스 Foo를 구현한 예이다. class

AppKit의 스크롤뷰, NSScrollView 사용법

iOS에서 화면에 표시할 수 있는 뷰 영역보다 큰 콘텐츠를 표시하기 위해서는 UIScrollView를 사용해서 스크롤 및 확대/축소에 대한 지원을 손쉽게 구현할 수 있음을 우리는 알고 있다. 그렇다면 macOS 환경에서 스크롤뷰는 어떤식으로 구현될 수 있고, 또 그만큼 손쉽게 사용할 수 있을까? 비슷한 스크롤 서비스를 제공한다는 공통점에도 불구하고 데스크톱 환경은 우리가 생각하는 것보다 훨씬 더 복잡하고 많은 요소가

Segue를 통한 뷰 컨트롤러 전환과 데이터 교환 방법

꽤 오래전에 iOS에서 뷰를 전환하는 방법에 대해 글을 포스팅한 적이 있는데, 최근에도 비슷한 질문을 종종 받는다. 단순히 뷰를 표시하는 것보다는 어떻게 뷰 간에 데이터를 주고 받느냐는 것이다. 오늘은 이와 관련하여 스토리보드를 사용할 때의 방법 위주로 조금 자세히 살펴보도록 하겠다. 스토리보드 Segue에 의한 뷰 전환 스토리보드가 여전히 불편하다는 사람도 많이 있지만, 사실 스토리보드의 도입은 미리 정해진

AutoLayout을 코드로 정의하기 (Swift)

오토레이아웃 오토레이아웃이 도입되기 이전에도 코코아 및 코코아터치에서는 상위뷰나 윈도가 크기가 변하는 경우에 하위 뷰들의 크기가 그에 따라 어떻게 변할 것인지를 결정해주는 방법이 있었다. 흔히 spring & struts라 불리는 오토리사이징 마스크가 그것이다. 하지만 오토 리사이징 마스크는 한 가지 문제가 있는데, 그것은 오토 리사이징 마스크는 수퍼뷰와 서브뷰 둘 사이의 관계만을 정의하기 때문에 이를 따라 뷰의 크기나 위치가