๋ชฉ์ฐจ
- UIActivityViewController ์์ฑํ๊ธฐ
- excludedActivityTypes๋ฅผ ์ฌ์ฉํด ํ์์๋ ์ฑ ์ ๊ฑฐ
- completionWithItemsHandler ์ฒ๋ฆฌํ๊ธฐ
- UIActivityViewController์ ๋ ๋ค๋ฅธ Instance Property: allowsProminentActivity
Apple์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ '๊ณต์ ํ๊ธฐ' ๊ธฐ๋ฅ์ด ์๋ค. ๋ฉ์ผ, ๋ฉ๋ชจ์ฅ, ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ ๋ฑ์ ์ฌ์ฉํ ์๋ ์๊ณ , ์นดํก, ํธ์ํฐ, ํ์ด์ค๋ถ ๋ฑ ํ ์ฑ์์ ๊ณต์ ๊ธฐ๋ฅ์ ์ง์ํ๋ค๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ก ๊ตฌํํ ํ์์์ด ์์ ์ ์ฑ์์ ํ ์ฑ์ผ๋ก ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค.
'๊ณต์ ํ๊ธฐ'๋ UIActivityViewController ํด๋์ค๋ฅผ ํตํด ๊ตฌํํ ์ ์๋ค. UIAvtivityViewController๋ UIViewController๋ฅผ ์์๋ฐ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ํญ์ ํด์ค๋ ๊ฒ์ฒ๋ผ Presentํ๊ณ Dismissํ๋ฉฐ ์ฌ์ฉํ ์ ์๋ค.
UIActivityViewController ์ฝ๊ธฐ
UIActivityViewController ์์ฑํ๊ธฐ
UIActivityController ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ด activityItems์ applicationActivities ํ๋ผ๋ฏธํฐ๊ฐ ํ์ํ๋ค.
activityItems์ ๊ณต์ ํ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํ ํ๋ผ๋ฏธํฐ๋ก, ๊ฐ๋จํ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด๋ ๋๊ณ UIActivityItemSource ํ๋กํ ์ฝ์ ์ค์ํ ํด๋์ค๋ฅผ ๋ง๋ค์ด ๊ณต์ ํ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ์ปค์คํ ํ ์๋ ์๋ค. ์ฌ๊ธฐ์๋ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด ๊ณต์ ํ๋ ๋ฐฉ๋ฒ๋ง ์์๋ก ๋ค๊ณ ๋ค์ ๊ฒ์๊ธ์์ UIActivityItemSource ํ๋กํ ์ฝ์ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ ์์ ์ด๋ค.
applicationActivities ๋ ์ปค์คํ ์๋น์ค๋ฅผ ํ์ํ๋ UIActivity ๊ฐ์ฒด ๋ฐฐ์ด๋ก, ์์ง ์ค์ตํด๋ณด์ง๋ ์์์ง๋ง '๊ณต์ ํ๊ธฐ' ํ๋จ์ ์์นํ '๋์'์ ์ถ๊ฐํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
์) ๋งํฌ๋ฅผ ์ฐ๊ฒฐํด ๋ฒํผ ํด๋ฆญ ์ ๋ฐ๋ก ์ฌํ๋ฆฌ๋ก ์ฐ๊ฒฐ๋๊ฒ ๋ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ค๊ณ ํ๋ค.
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 ]
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