티스토리 뷰

iOS

UIActivityViewController

malrang-malrang 2022. 6. 25. 02:19

UIActivityViewController

앱에서 표준 서비스를 제공하는 데 사용하는 보기 컨트롤러입니다.

Declaration

class UIActivityViewController : UIViewController

Overview

이 시스템은 항목을 페이스트보드에 복사하고, 콘텐츠를 소셜 미디어 사이트에 게시하고, 전자 메일 또는 SMS를 통해 항목을 보내는 등의 몇 가지 표준 서비스를 제공합니다. 앱은 사용자 지정 서비스를 정의할 수도 있습니다.

앱은 이 보기 컨트롤러를 구성, 표시 및 해제할 책임이 있습니다. 뷰 컨트롤러에 대한 구성에는 뷰 컨트롤러가 작동할 데이터 개체를 지정해야 합니다. (앱에서 지원하는 사용자 지정 서비스 목록을 지정할 수도 있습니다.) 보기 컨트롤러를 표시할 때 현재 장치에 적합한 방법을 사용하여 표시해야 합니다. iPad에서는 보기 컨트롤러를 팝업으로 표시해야 합니다. iPhone 및 iPod touch에서는 모듈식으로 표시해야 합니다.

Topic

Initializing the Activity View Controller

  • init(activityItems: [Any], applicationActivities: [UIActivity]?)
    • 지정된 데이터에 대해 작동하는 새 활동 보기 컨트롤러 개체를 초기화합니다.
  • init(activityItemsConfiguration: UIActivityItemsConfigurationReading)
    • 지정된 구성에서 작동하는 새 활동 보기 컨트롤러 개체를 초기화합니다.
  • class UIActivityItemsConfiguration
    • 응답자가 다양한 상호 작용을 통해 데이터를 내보낼 수 있도록 하는 구성입니다.
  • protocol UIActivityItemsConfigurationReading
    • 개체가 활동 항목 구성으로 작동할 수 있도록 개체에서 채택한 메서드 집합입니다.

Accessing the Completion Handler

  • var completionWithItemsHandler: UIActivityViewController.CompletionWithItemsHandler?
    • 활동 보기 컨트롤러가 해제된 후 실행할 완료 처리기입니다.
  • typealias UIActivityViewController.CompletionWithItemsHandler
    • 활동 보기 컨트롤러가 해제된 후 실행할 완료 핸들러입니다.

Excluding Specific Activity Types

  • var excludedActivityTypes: [UIActivity.ActivityType]?
    • 표시하지 않아야 하는 서비스 목록입니다.
  • typealias UIActivityViewController.CompletionHandler
    • 활동 보기 컨트롤러가 해제된 후 실행할 완료 핸들러입니다.

Instance Properties

  • var allowsProminentActivity: Bool
    • ?? 요녀석은 공식문서에 설명이 없다 선언부만 작성되어있는데 나중에 사용할일있으면 알아보자..!

음.. 요녀석은요 앱쓰다보면 공유? 같은거 할때 쓰는녀석인데 이렇게 생긴녀석입니다!

아래에 시트 처럼 올라온녀석이다!

위의 사진은 시뮬레이터라서 뭐가 별로 없지만 앱을사용하다 뭔가 카톡친구한테 공유한다거나 할때 종종 봤던 녀석이다!

요녀석은 애플리케이션 내에서 특정 아이템을 복사하거나 외부 SNS로 공유하는 내보내기 서비스는 사용자가 아이템을 다양한 방식으로 활용하도록 도와준다.

iOS 6 이상부터 사용 가능하다!

Alert 비스무리하게 띄우면 되는데 어렵지 않다!

Acitivity Item

UIActivityViewController 클래스를 이용해 아래 아이템을 공유할 수 있다.

  • 문자열(String)
  • URL 링크(String)
  • 이미지(UIImage)
  • UIActivityItemSource 프로토콜을 따르는 커스텀 타입의 인스턴스

Activity Type

UIActivityViewController 클래스가 기본적으로 제공하는 내보내기 서비스의 UIActivity에는 아래와 같은 종류가 있다.

// 읽기 목록에 추가
static let addToReadingList: UIActivityType

// 에어드롭으로 공유하기
static let airDrop: UIActivityType

// 연락처에 지정
static let assignToContact: UIActivityType

// Paste Board에 복사
static let copyToPasteboard: UIActivityType

// 메일 보내기
static let mail: UIActivityType

// 메시지 보내기
static let message: UIActivityType

// iBooks에서 열기
static let openInIBooks: UIActivityType

// 페이스북에 공유하기
static let postToFacebook: UIActivityType

// Flickr에 공유하기
static let postToFlickr: UIActivityType

// Tencent Weibo에 공유하기
static let postToTencentWeibo: UIActivityType

// 트위터에 공유하기
static let postToTwitter: UIActivityType

// Vimeo에 공유하기
static let postToVimeo: UIActivityType

// SinaWeibo에 공유하기
static let postToWeibo: UIActivityType

// 프린트
static let print: UIActivityType

// 카메라 롤에 저장하기
static let saveToCameraRoll: UIActivityType

// PDF 생성(iOS 11 부터 사용가능)
static let markupAsPDF: UIActivityType

메서드 및 프로퍼티

UIActivityViewController의 메서드와 프로퍼티

// 초기화 메서드로, UIActivityViewController 객체를 반환합니다.
init(activityItems: [Any], applicationActivities: [UIActivity]?)
// activityItems: [Any] 공유하려는 아이템으로 UIActivityItemSource 프로토콜을 준수하는 객체를 배열 형태로 넣어줄 수 있습니다.
// applicationActivities: [UIActivity]? 애플리케이션이 지원하는 커스텀 서비스를 나타내는 UIActivity 객체의 배열로, nil 값이 될 수 있습니다.

// 컨트롤러를 닫은 후 실행할 완료 핸들러입니다.
var completionWithItemsHandler: UIActivityViewControllerCompletionWithItemsHandler?

// UIActivityType 중 사용하지 않을 서비스를 지정합니다.
var excludedActivityTypes: [UIActivityType]?

구현해보자!

예시 코드를 보자!

기본적으로는 모든 서비스를 지원하는데 사용하지 않을 서비스를 지정할수있다!
보통 원하는 기능을 등록해야하는데 원하지 않는서비스를 등록하는게 조금 신기했다!

1번째 예시코드!

// 1. UIActivityViewController 초기화, 공유 아이템 지정
let textToShare: String = "Assassins"

let activityViewController = UIActivityViewController(activityItems: [textToShare], applicationActivities: nil)

// 2. 기본으로 제공되는 서비스 중 사용하지 않을 UIActivityType 제거(선택 사항)
activityViewController.excludedActivityTypes = [UIActivityType.addToReadingList, UIActivityType.assignToContact]

// 3. 컨트롤러를 닫은 후 실행할 완료 핸들러 지정
activityViewController.completionWithItemsHandler = { (activity, success, items, error) in
    if success {
    // 성공했을 때 작업
   }  else  {
    // 실패했을 때 작업
   }
}
// 4. 컨트롤러 나타내기(iPad에서는 팝 오버로, iPhone과 iPod에서는 모달로 나타냅니다.)
self.present(activityViewController, animated: true, completion: nil)

2번째 예시코드!

 func showActivity(title: String?) {
        var shareObject = [Any]()

        if let shareText = title {
            shareObject.append(shareText)
        }

        let activityViewController = UIActivityViewController(
            activityItems: shareObject,
            applicationActivities: nil
        )

        present(activityViewController, animated: true)
    }

요런식으로 [Any]타입의 인스턴스에 append메서드로 추가해서 넣어주어도된다!

2개의 예시코드 모두 activityItems에 string값을 추가했는데
string값을 activityItems에 넣으면 아래의 사진처럼

activityViewController의 title부분에 추가되는걸 볼수있다!
이미지를 넣어보진않았지만 이미지 넣으면 title옆에 이미지가 바뀌려나?? 아직 이미지를 넣어보진 않았는데 그럴것 같다..!

참고한 문서및 자료

https://developer.apple.com/documentation/uikit/uiactivityviewcontroller
https://www.zehye.kr/ios/2020/03/12/12iOS_activity_view_controller/

'iOS' 카테고리의 다른 글

iOS App 특정 HTTP 접근 허용방법  (0) 2022.06.28
Localization 지역, 언어에따라 다르게 표시하기  (0) 2022.06.28
DateFormatter  (0) 2022.06.24
CoreAnimation  (0) 2022.06.22
Core Graphics  (0) 2022.06.22
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함