iOS

[ iOS ] ๊ณต์œ ํ•˜๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ - UIActivityViewController

Forest Yun 2023. 1. 3. 18:09
728x90

 

 

 

๋ชฉ์ฐจ

  1. UIActivityViewController ์ƒ์„ฑํ•˜๊ธฐ
  2. excludedActivityTypes๋ฅผ ์‚ฌ์šฉํ•ด ํ•„์š”์—†๋Š” ์•ฑ ์ œ๊ฑฐ
  3. completionWithItemsHandler ์ฒ˜๋ฆฌํ•˜๊ธฐ
  4. UIActivityViewController์˜ ๋˜ ๋‹ค๋ฅธ Instance Property: allowsProminentActivity

 

 

 

 


 

 

 

 

 

 

Apple์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” '๊ณต์œ ํ•˜๊ธฐ' ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. ๋ฉ”์ผ, ๋ฉ”๋ชจ์žฅ, ํด๋ฆฝ๋ณด๋“œ ๋ณต์‚ฌ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์นดํ†ก, ํŠธ์œ„ํ„ฐ, ํŽ˜์ด์Šค๋ถ ๋“ฑ ํƒ€ ์•ฑ์—์„œ ๊ณต์œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•  ํ•„์š”์—†์ด ์ž์‹ ์˜ ์•ฑ์—์„œ ํƒ€ ์•ฑ์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

'๊ณต์œ ํ•˜๊ธฐ'๋Š” UIActivityViewController ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. UIAvtivityViewController๋Š” UIViewController๋ฅผ ์ƒ์†๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ํ•ญ์ƒ ํ•ด์˜ค๋˜ ๊ฒƒ์ฒ˜๋Ÿผ Presentํ•˜๊ณ  Dismissํ•˜๋ฉฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

UIActivityViewController ์ฝ๊ธฐ

 

 

 

UIActivityViewController ์ƒ์„ฑํ•˜๊ธฐ

UIActivityController ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด activityItems์™€ applicationActivities ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

activityItems์€ ๊ณต์œ ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•  ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ, ๊ฐ„๋‹จํžˆ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด๋„ ๋˜๊ณ   UIActivityItemSource ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๊ณต์œ ํ•  ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๋ฅผ ์ปค์Šคํ…€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ ์˜ˆ์‹œ๋กœ ๋“ค๊ณ  ๋‹ค์Œ ๊ฒŒ์‹œ๊ธ€์—์„œ UIActivityItemSource ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•  ์˜ˆ์ •์ด๋‹ค.

activityItems '๊ตฌ๊ธ€'

 

 

 

 

applicationActivities ๋Š” ์ปค์Šคํ…€ ์„œ๋น„์Šค๋ฅผ ํ‘œ์‹œํ•˜๋Š” UIActivity  ๊ฐ์ฒด ๋ฐฐ์—ด๋กœ, ์•„์ง ์‹ค์Šตํ•ด๋ณด์ง€๋Š” ์•Š์•˜์ง€๋งŒ '๊ณต์œ ํ•˜๊ธฐ' ํ•˜๋‹จ์— ์œ„์น˜ํ•œ '๋™์ž‘'์„ ์ถ”๊ฐ€ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

์˜ˆ) ๋งํฌ๋ฅผ ์—ฐ๊ฒฐํ•ด ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋ฐ”๋กœ ์‚ฌํŒŒ๋ฆฌ๋กœ ์—ฐ๊ฒฐ๋˜๊ฒŒ ๋” ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

applicationActivities 'Safari๋กœ ์—ด๊ธฐ'

 

 

 

UIActivityViewController๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

let title: String = "๊ตฌ๊ธ€"
let activityItems: [Any] = [title]

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

init(activityItems:applicationActivities:) ์ฝ๊ธฐ

 

 

 

 

 

excludedActivityTypes๋ฅผ ์‚ฌ์šฉํ•ด ํ•„์š”์—†๋Š” ์•ฑ ์ œ๊ฑฐ

iOS์—์„œ ๊ณต์œ ํ•˜๊ธฐ ํ™”๋ฉด์„ Presentํ–ˆ์„ ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋–  ์žˆ๋Š” ์—ฌ๋Ÿฌ ์•ฑ๋“ค์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ค‘ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ์•ฑ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ์—๋Š” excludedActivityTypes ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•ด ์ œ์™ธํ•  ์•ฑ๋“ค์„ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ œ์™ธํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๋“ค์€ ๋ฉ”์ผ, ๋ฉ”์„ธ์ง€, airDrop, ํŠธ์œ„ํ„ฐ, ํŽ˜์ด์Šค๋ถ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ activityType ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

activityViewController.excludedActivityTypes = [ .message, .airDrop ]

 

excludedActivityTypes ์ฝ๊ธฐ

 

 

 

completionWithItemsHandler ์ฒ˜๋ฆฌํ•˜๊ธฐ

'๊ณต์œ ํ•˜๊ธฐ' ํ™”๋ฉด์„ dismissํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋™์ž‘์„ ์™„๋ฃŒํ•œ ํ›„ ์‹คํ–‰๋˜๋Š” Handler์ด๋‹ค. ์ด Handler์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ๋Š” ์„ ํƒ๋œ activity๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” activityType, ๋™์ž‘ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” completed, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ „๋‹ฌํ•˜๋Š” returnItems, ๋™์ž‘์— ์‹คํŒจํ–ˆ์„ ์‹œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” error ๊ฐ€ ์žˆ๋‹ค. 

๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ž์„ธํ•œ ์„ค๋ช…์€ UIActivityViewController.completionWithItemsHandler ์ฝ๊ธฐ ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

activityViewController.completionWithItemsHandler = {(activity, isSuccess, returnedItems, error) in
    if isSuccess {
        print("Success, ์‚ฌ์šฉ๋œ ์„œ๋น„์Šค ๋ช…: \(String(describing: activity))")
    } else {
        print("Fail, ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜: \(error?.localizedDescription)")
    }
}

 

 

 

 

UIActivityViewController์˜ ๋˜ ๋‹ค๋ฅธ Instance Property

 

allowsProminentActivity

UIActvityViewController์—๋Š” ์œ„์—์„œ ์ •๋ฆฌํ•œ ๊ฒƒ๋“ค ์™ธ์— ํ”„๋กœํผํ‹ฐ๊ฐ€ ํ•˜๋‚˜ ๋” ์กด์žฌํ•œ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ์—๋Š” ๋”ฐ๋กœ ์„ค๋ช…์ด ๊ธฐ์žฌ๋˜์–ด ์žˆ์ง€ ์•Š์ง€๋งŒ Xcode์—์„œ 'Jump to Definition'์„ ํ†ตํ•ด ๊ฐ„๋žตํ•œ ์„ค๋ช…์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

// ์ผ๋ถ€ ์ƒํ™ฉ์—์„œ, ํŠน์ • activity๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด activity view controller๋Š” ํ—ค๋” view์—์„œ ํŠน์ • activity๋ฅผ ์ƒ์Šน์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
// ํ—ค๋” view๋กœ ์˜ฌ๋ ค์ ธ ๋ˆˆ์— ๋„๋Š” activity๋Š” ์˜ค์ง ์‹œ์Šคํ…œ์— ์˜ํ•ด์„œ๋งŒ ์„ ํƒ๋  ์ˆ˜ ์žˆ๋‹ค.
// ๊ธฐ๋ณธ ๊ฐ’์€ true์ด๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œ์ผœ ๋ณด์•„๋„ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์ด๋Š” ๋ณ€ํ™”๊ฐ€ ์—†์–ด ์ •ํ™•ํžˆ ์–ด๋–ค ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์•„์ง ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์„ค๋ช…์„ ๋ฐ”ํƒ•์œผ๋กœ ์ถ”์ธกํ•ด๋ณด์ž๋ฉด ํŠน์ • ์•ฑ ๋˜๋Š” ๋™์ž‘์„ ์ž๋™์œผ๋กœ ์•ž ์ชฝ์— ์œ„์น˜์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์ด ์•„๋‹๊นŒ ์‹ถ์€๋ฐ, ์ˆœ์„œ๋Š” Edit์ด ๊ฐ€๋Šฅํ•˜๋‹ˆ ์•„๋‹Œ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๋‹ค. ์ถ”ํ›„์— ๋‹ค์‹œ ํ•œ ๋ฒˆ ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค. 

 

/// In some contexts, the activity view controller can elevate a specific activity in the header view to enhance it.
/// The prominent activity can only be chosen by the system.
/// Defaults to YES.

@available(iOS 15.4, *)
open var allowsProminentActivity: Bool

 

 

 

 

 

 

 

 

 

 

728x90