커스텀 뷰로 만든 UI 컴포넌트의 포커스링 그리기 – Cocoa

포커스 링 코코아 UI 요소에서 현재 포커스를 받은 UI 컴포넌트는 외부에 흐릿한 푸른 색 후광이 그려지며, 현재 포커스를 받고 있는 입력 디바이스라는 점을 시각적으로 피드백한다.  시중의 코코아 관련한 대부분의 책에서는 다음과 같이 draw: 메소드 내에서 포커스링을 그리는 것으로 포커스링을 흉내낼 수 있다고 한다. 1 override func draw(_ dirtyRect: NSRect) { // 배경을 칠하고, super.draw(dirtyRect) self.bgColor.set() NSBezierPath.fill(bounds) // 자신이 속한 윈도에서 자기가 제1응답자라면? if let fr = window?.firstResponder, fr === self { // 포커스 컬러로 세팅하여, 자신의 테두리 영역을 그린다. NSColor.keyboardFocusIndicatorColor.set()

(Swift) iOS, OSX에서 이미지 저장하기

이미지를 저장하기 이미지를 JPEG, PNG 데이터로 만드는 것은 UIKit의 표준함수를 이용할 수 있다. func UIImageJPEGRepresentation(_ image: UIImage!, _ compressionQuality: CGFloat) -> NSData! func UIImagePNGRepresentation(_ image:UIImage!) -> NSData! 이를 이용해서 데이터를 저장할 수 있다. NSData로 만들어서 그냥 저장하면 되니까. func saveImage(image: UIImage, toURL url: NSURL, withFormat format:ImageSavingFormat = .PNG) { let data: NSData switch format { case .PNG: data = UIImagePNGRepresentation(image) case .JPEG: data = UIImageJPEGRepresentation(image, 1.0) } var error: NSError? data.writeToURL(url, atomically: false, error: &error) if error != nil {

코코아 바인딩이란

코코아 바인딩 기능적인 측면에서 가장 단순하게 설명하면, 코코아 바인딩은 모델과 뷰 사이에 어떠한 글루코드 없이 값과 디스플레이되는 것을 동기화시키는 것이다. 즉 바인딩을 구성하면 값이 바뀔 대 별도의 처리 없이 자동으로 뷰가 업데이트되고, 뷰에서 변경이 일어나면 즉시 값이 변경되는 것을 코드 없이 구현한다는 것이다. 즉 작성/유지해야 하는 코드의 양을 최소화하면서 이러한 기능을 제공한다. 코코아 바인딩을 적용하기 위해서 기존 코드를 재작성할 필요도 없다.

Mac App’s Core Objects

App Life Cycle 여느 C 프로그램과 같이1 OSX앱도 main 함수로부터 시작한다. 이 함수는 단순히 NSApplicationMain() 함수를 다시 호출한다. 대략 이렇게 생겼다. #import <Cocoa/Cocoa.h> int main(int argc, const char* argv[]) { return NSApplicationMain(argc, (const char**) argv); } NSApplicationMain 함수는 앱을 초기화하고 실행할 준비를 한다. 초기화 과정의 일환으로 이 함수는 아래와 같은 작업을 한다. NSApplication 클래스 객체를 하나 만든다. 이 객체는 +sharedApplication 메소드로 얻을 수 있다. Info.plist 파일을 읽어들여서 여기에 기록된 NSMainNibFile로부터 nib 파일을 읽어들인다. 만약 스토리보드를 쓰고 있다면 기본 스토리보드를 읽어와서

NSApplicationMain

NSApplicationMain int NSApplicationMain(int argc, const char* argv[]); 코코아 앱이 실행될 때 main 함수가 곧장 호출하는 함수로, 앱 객체를 생성하고 앱의 런칭 과정을 처리한다. 앱 객체의 클래스는 무조건 NSApplication이며, 앱 델리게이트는 nib 파일 내에 정의되어 있어야 한다. (iOS는 앱 델리게이트 클래스명을 전달하는 인자 부분이 마련되어 있음) argc, argv 파라미터가 정의되어 있지만, 실제로 값을 전달해도 무시한다. 코코아 내에서는 프로그램 실행시의 arguments를 _NSGetArgv, _NSGetArgc, _NSGetEnviron 함수들을 통해서 얻어야 한다.