UIPasteboard

Panther·2021년 8월 10일
0

https://developer.apple.com/documentation/uikit/uipasteboard

"An object that helps a user share data from one place to another within your app, and from your app to other apps."

사용자가 앱 내에서 한 곳으로부터 다른 곳으로 데이터를 공유하는 것을 돕고, 앱으로부터 다른 앱으로 데이터를 공유하는 것을 돕는 객체입니다.

Declaration

class UIPasteboard : NSObject

Overview

다른 앱과 데이터를 공유하려면, 시스템와이드 일반 페이스트보드를 사용해야 합니다. 소속되어 있는 팀으로부터 다른 앱으로 데이터를 공유하려면(공유하려는 앱 사이에서 같은 팀 ID) 네임드 페이스트보드를 사용해야 합니다.

UI에서의 선택에 대한 복사, 잘라내기, 복제 작업이 사용자에 의해 요청되면, 앱에 있는 객체는 데이터를 페이스트보드에 씁니다. 같은 혹은 다른 앱에서 다른 객체는 페이스트보드로부터 해당 데이터를 읽고, 새로운 위치로 사용자에게 제공합니다. 이는 주로 붙여넣기 작동 요청 시 발생합니다.

Note
iOS 14를 시작으로 앱이 다른 앱에서 기인한 일반 페이스트보드 컨텐트를 가져올 때, 시스템은 사용자에게 알려줍니다. 사용자에게 알려주는 것 없이 페이스트보드 아이템이 웹 서치 용어, URL, 혹은 숫자와 같은 다양한 패턴에 일치하는지 확인하기 위해 Detecting Patterns of Content in Pasteboard Items에서 설명한 메소드를 사용하시기 바랍니다.

The General Pasteboard and Named Pasteboards

시스템와이드 일반 페이스트보드는 일반 상수로 식별됩니다. 모든 데이터의 타입을 사용할 수 있습니다. 일반 클래스 메소드를 사용해서 일반 페이스트보드를 가져오시기 바랍니다.

앱 내부 및 같은 팀 ID를 갖는 다른 앱으로부터 데이터를 공유하기 위해 클래스 메소드 init(name:create:), withUniqueName()을 사용해서 네임드 페이스트보드를 생성할 수 있습니다.

Using Pasteboards

UIPasteboard 클래스는 개별 페이스트보드 아이템을 읽고 쓰기 위한 메소드를 제공하며, 한 번에 여러 페이스트보드에 읽고 쓰기 위한 메소드도 제공합니다. 더 많은 정보는 Getting and Setting Pasteboard Items를 살펴보시기 바랍니다. 페이스트보드에 데이터를 쓰려면 두 가지 형태 중 하나가 될 수 있습니다.

Getting and Setting Pasteboard는 이 글의 원문으로 연결됩니다. 원문 아래에 각종 변수 등을 소개하고 있습니다.

Getting and Setting Pasteboard
https://developer.apple.com/documentation/uikit/uipasteboard#1654138

  • 만약 데이터가 NSString, NSArray, NSDictionary, NSDate, NSNumber, UIImage, NSURL과 같은 객체로 표현될 수 있다면, 값으로 표현될 수 있습니다. 페이스트보드에 쓰기 위해 setValue(_:forPasteboardType:)과 같은 메소드를 사용하시기 바랍니다.
  • 만약 데이터가 바이너리이면, 페이스트보드에 쓰기 위해 setData(_:forPasteboardType:) 메소들르 사용하시기 바랍니다.

Getting and Setting Pasteboard Items of Standard Data Types에서 설명하고 있는 것처럼, UIPasteboard 클래스는 스트링, 이미지, URL, 색상을 하나 혹은 여러 페이스트보드 아이템에 읽고 쓰기 위한 편의 메소드를 제공합니다.

Note
Getting and Setting Pasteboard Items of Standard Data Types에 있는 메소드를 사용함으로써 페이스트보드로부터 특정 데이터 타입 읽기를 시도하기 전에, 원하는 타입의 데이터 존재 여부를 확인하시기 바랍니다. 타입 확인 메소드를 사용해서 그렇게 할 수 있습니다.

Getting and Setting Pasteboard Items of Standard Data Types는 이 글의 원문으로 연결됩니다. 원문 아래에 각종 변수 등을 소개하고 있습니다.

Getting and Setting Pasteboard Items of Standard Data Types
https://developer.apple.com/documentation/uikit/uipasteboard#1654138

UIPasteboard는 페이스트보드에서 특정 데이터 타입이 존재하는지 여부를 직접 확인하기 위한 속성을 제공합니다. Checking for Data Types on a Pasteboard에서 설명한 것과 같습니다. 페이스트보드 데이터를 읽는 것을 시도하기보다, 요구되거나 데이터가 존재하지 않는 경우에도 불필요하게 데이터를 가져오는 시스템 시도를 피하기 위해 이 속성을 사용하시기 바랍니다. 예를 들어 새로운 hasStrings 속성을 사용해 UI에서 스트링 데이터 페이스트 옵션의 존재 여부를 확인할 수 있습니다. 아래 코드와 같습니다.

Checking for Data Types on a Pasteboard는 이 글의 원문으로 연결됩니다. 원문 아래에 각종 변수 등을 소개하고 있습니다.

Checking for Data Types on a Pasteboard
https://developer.apple.com/documentation/uikit/uipasteboard#1654138

if UIPasteboard.general.hasStrings {
    // Enable string-related control...
}

Pasteboard Items and Representation Types

페이스트보드에 객체를 쓰려고 하는 경우 페이스트보드는 페이스트보드 아이템으로써 저장합니다. 페이스트보드 아이템은 하나 혹은 하나 이상의 키-값 쌍으로 구성되며, 키는 값의 표현 타입(페이스트보드 타입이라고도 부르는)을 식별합니다.

유니폼 타입 아이덴티파이어(UTI)는 표현 타입을 위한 키로써 자주 사용됩니다. 예를 들어 kUTTypeJPEG UTI(public.jpeg에 대한 상수)을 JPEG 데이터를 위한 표현 타입 키로써 사용할 수 있습니다.

UTI 및 리스트는 Uniform Type Identifiers Overview를 살펴보시기 바랍니다.

Uniform Type Identifiers Overview
https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/understanding_utis/understand_utis_intro/understand_utis_intro.html#//apple_ref/doc/uid/TP40001319

앱은 표현 타입 명명을 위한 모든 스트링 사용에 자유롭습니다. 그러나 app-specific 데이터 타입의 경우 타입의 고유함을 보장할 수 있도록 reverse-DNS 표기법을 권장합니다(예를 들어 com.myCompany.myApp.myType).

복사 혹은 잘라내기 작동이 일어나는 동안 페이스트보드 아이템에 다양한 표현 타입을 제공함으로써 데이터 공유에 대해 유연함을 제공할 수 있습니다. 앱 혹은 다른 앱 내부에서 다양한 컨텍스트가 적합한 표현 타입을 사용할 수 있도록 해줍니다. 예를 들어 이미지 복사의 경우 앱은 PNG, JPeG, GIF 데이터 포맷과 같은 다양한 표현 타입을 쓸 수 있습니다. 만약 원본 이미지가 PNG 포맷이었지만 받는 앱이 GIF 이미지만 처리할 수 있다면, 여전히 페이스트보드 데이터로 사용할 수 있습니다.

표현 타입에 대한 더 많은 정보는 types 인스턴스 메소드에 대한 discussion을 읽어보시기 바랍니다.

types
https://developer.apple.com/documentation/uikit/uipasteboard/1622077-types
https://velog.io/@panther222128/types

Sharing Pasteboards Between Devices

사용자가 아이클라우드에 로그인할 떄, 일반 페이스트보드는 자동으로 컨텐츠를 같은 아이클라우드 계정을 사용하는 가까운 기기로 전송합니다. 일반 페이스트보드에 컨텐츠를 쓸 때 핸드오프 동작을 제어할 수 있고, 아이템에 대한 만기를 설정할 수 있습니다. setItems(_:options:) 메소드를 사용해서 구현합니다. 아래와 같습니다.

  • 핸드오프로부터 페이스트보드를 제외하려면, localOnly 옵션과 함께 setItems(_:options:) 메소드를 호출해야 합니다.
  • 복사된 데이터에 대한 만기 시점을 나타내려면 expirationDate 옵션과 함께 setItems(_:options:) 메소드를 호출합니다. 설정한 시점이 되면, 시스템은 페이스트보드로부터 페이스트보드 아이템을 제거합니다.

Using Pasteboards With Other Objects

UIPasteboard 클래스가 복사, 붙여넣기, 복제 작동의 중심일지라도, 이러한 작동들에 대해 다른 UIKit 클래스의 프로토콜과 인스턴스를 사용할 수 있습니다.

  • UIMenuController — 복사, 잘라내기, 선택, 전체 선택 명령을 갖는 메뉴를 선택 위 혹은 아래에 표시합니다.
  • UIResponder — 리스폰더는 현재 컨텍스트에 기반해 위에서 언급한 메뉴에서 활성화 혹은 비활성화를 위한 canPerformAction(_:withSender:)를 구현합니다.
  • UIResponderStandardEditActions — 리스폰더는 이 비공식 프로토콜에서 선언된 메소드를 구현해서 선택된 메뉴 명령(예를 들어 복사, 붙여넣기)을 처리하도록 합니다.

복사, 붙여넣기, 복제 작동을 구현한 앱은 UI에서의 관련 선택을 관리할 수 있고 제시할 수 있습니다. 더불어 앱은 페이스트보드 컨텐트에서의 변경사항과 데이터 모델에서의 변경사항을 앱에 적합하도록 조정해야 합니다.

Topics


Constants

Pasteboard Names

시스템 페이스트보드를 식별하는 이름입니다.

https://developer.apple.com/documentation/uikit/uipasteboard/pasteboard_names
https://velog.io/@panther222128/Pasteboard-Names

Pasteboard Data Type Representations

주어진 객체 값에 대한 페이스트보드 아이템 표현 타입입니다.

https://developer.apple.com/documentation/uikit/uipasteboard/pasteboard_data_type_representations
https://velog.io/@panther222128/Pasteboard-Data-Type-Representations

UserInfo Dictionary Keys

페이스트보드에 추가되거나 페이스트보드로부터 삭제되는 페이스트보드 아이템의 표현 타입에 접근하기 위해 아래 키를 사용하시기 바랍니다.

https://developer.apple.com/documentation/uikit/uipasteboard/userinfo_dictionary_keys
https://velog.io/@panther222128/UserInfo-Dictionary-Keys


See Also


Pasteboard

UIPasteConfiguration

붙여넣기와 드래그 앤 드롭 동작에서 특정 데이터 타입을 수용하기 위한 기능을 선언할 수 있도록 객체가 구현하는 인터페이스입니다.

https://developer.apple.com/documentation/uikit/uipasteconfiguration
https://velog.io/@panther222128/UIPasteConfiguration-1y675jtm


0개의 댓글