[iOS] NCWidgetProviding Protocol
Ncwidgetproviding
투데이 위젯에서의 동작과 외관의 커스터마이징을 위한 인터페이스입니다.
커스터마이징 디스플레이
widgetActiveDisplayModeDidChange(_:withMaximumSize:)
활성 디스플레이 모드가 변경되면 호출됩니다.
첫번째 파라미터로 새로운 활성 디스플레이 모드가 전달되며 NCWidgetDisplayMode(열거형)에는 compact와 expanded가 있습니다.
두번째 파라미터로 위젯의 새로운 최대사이즈가 CGSize로 전달됩니다. (compact 높이 110픽셀로고정)
위젯이 preferredContetSize값을 변경하여 새로운 디스플레이 모드를 더 적합하게 하려면 해당 메소드를 사용하시기바랍니다.
PreferredContentSize
뷰컨트롤러의 뷰의 우선된 사이즈
이 속성의 값은 주로 뷰 컨트롤러의 내용을 팝오버 표시할 때 사용되지만 다른 상황에서도 사용할 수 있습니다.
뷰 컨트롤러가 팝오버 표시되는 동안 이 속성의 값을 변경하면 크기 변경이 애니메이션화되지만, 너비 또는 높이 에 0을 주면 변경 내용이 애니메이션화되지 않습니다.
업데이팅 위젯 컨텐츠
widgetPerformUpdate(completionHandler:)
위젯에 컨텐츠가 업데이트할 기회를 주기위해 호출
핸들러는 위젯 컨텐츠가 업데이트 되었을 때 호출할 코드 블럭이며, 다음과 같은 매개변수를 사용합니다.
result : 업데이트 절차의 결과를 설명하는 NCUpdateResult형식의 값 입니다.
NCUpdateResult(enum) - newData, nonData, failed
이 메소드는 스냅샷같은 동작전 컨텐츠를 업데이트하고, 우선적인 뷰를 다시 그리는 기회를 주기위해 호출됩니다.
위젯이 컨텐츠들을 업데이팅완료하면 (필요에따라 다시그림) 위젯은 컴플리션핸들러블럭을 호출하여 적합한 결과값을 넘깁니다.
편집 지원
widgetAllowsEditing
위젯이 유저에의해 수정될수 있는지 없는지 가리키는 Boolean 값입니다.
true면 자동으로 해더부분에 수정 시작과 종료를 유저가 선택할수 있는 버튼을 제공합니다. (기본 false)
widgetDidBeginEditing()
유저가 수정 시작누르면 호출됩니다. 위 프로퍼티가 true일때 호출 가능합니다.
widgetDidEndEditing()
위젯의 수정 세션을 종료할때 호출합니다. 이 메소드는 유저가 위젯의 수정 끝 버튼을 눌렀을때 호출, 또는 다른 위젯의 수정을 시작하여 기존 수정이 비활성화될때 호출됩니다.
상속받은 프로토콜
NSExtensionRequestHandling
호스트앱으로부터의 요청에 응답하기위해 앱 익스텐션이 사용하는 인터페이스
앱 익스텐션에 라이프 사이클 후크?를 제공한다.확장자의 주요 객체는 이 프로토콜을 구현하고 호스트 앱에서 요청을 추적하기 위해 beginRequest(with:)을 사용할 수 있습니다.
beginRequest(with:)
호스트 앱의 요청을 준비하기위해 알려줍니다.
파라미터 NSExtensionContext는 호스트앱이 생성한 요청의 컨텍스트를 나타내는 객체입니다.
대표적으로 컨텍스트는 익스텐션이 작동할수 있게하는 데이터를 포함합니다.
익스텐션은 호스트앱이 이 메소드로 전달되는 콘텍스트를 얻음으로 요청합니다. 그리고 만약 적합하다면 관련 데이터 아이템들을 요청하는 것을 준비합니다.
이 메소드는 익스텐션이 초기화된 후 받아집니다. 그러나 주요 객체가 컨텍스트와 어떤것들을 할지 묻기 전이지요.
예를들어 만약 주요 객체가 뷰컨트롤러라면 load view 전에 메세지를 받습니다.
익스텐션이 이 메세지를 받은후 뷰컨트롤러의 extensionContext프로퍼티를 nil이아닌 값으로 리턴합니다.
이프로토콜을 채택하고 beginRequestWithExtensionContext:를 override한다면 super beginRequestWithExtensionContext: 호출하세요.
NSExtensionContext
앱 익스텐션이 불려짐으로부터 호스트앱 컨텍스트
호스트앱이 앱 익스텐션에게 요청할때 익스텐션 컨텍스트를 제공합니다.
많은 앱 익스텐션들, 컨텍스트의 가장 중요한 부분은 유저가 원하는 동작의 inputItems프로퍼티가 포함된 데이터입니다.
inputItems
컨텍스트로 구성된 NSExtensionItem객체의 입력 리스트입니다. 컨텍스트가 입력아이템들이 없다면 이 배열은 비어있습니다..
NSExtensionItem
다른 외관을 나타내는 아이템의 확장된 동작 값들의 불변컬렉션
아이템 식별 프로퍼티 attributedTitle, userInfo, 아이템 컨텐츠 프로퍼티 attachments, attributedContexText가 있습니.
NSObjectProtocol
모든 Objective-C의 객체들 기초가되는 메소드들의 그룹
이 프로토콜은 Swift에 NSObjectProtocol이라는 이름으로 import되었습니다.
객체는 첫번째 클래스객체로 고려될수 있는 이프로토콜로 구성되었습니다.
특징
클래스 그리고 클래스의 한부분으로 상속가능
프로토콜들의 순응
개별적 메시지에 응답하는 능력
Cocoa의 root class인 NSObject는 이 프로토콜을 채택합니다. 그래서 NSObject를 상속하는 모든 객체들은 이 프로토콜에 의해 특징이 묘사되지요.