Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Mastering share sheet preview
Search
Yuka Ezura
November 11, 2019
Programming
1.5k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Mastering share sheet preview
Yuka Ezura
November 11, 2019
More Decks by Yuka Ezura
See All by Yuka Ezura
SF Symbols
ezura
9
1.5k
気遣いの iOS プログラミング
ezura
11
3.8k
Secret Swift tour
ezura
7
3.1k
Swift Album ver.4.1
ezura
3
1.6k
Swift と Kotlin
ezura
4
3k
哲学とSwiftの発表
ezura
5
660
アプリが動いたその先へ (iOS アプリ開発編)
ezura
1
1.2k
Blending Kotlin's culture into Swift
ezura
1
1.4k
Re: エラーと警告でコードをデザインする
ezura
2
1.1k
Other Decks in Programming
See All in Programming
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
240
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
390
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
440
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
180
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
490
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
380
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
350
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
130
Loosening the Reins: Go Generics Get More Flexible
kuro_kurorrr
0
330
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
300
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
500
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
7.8k
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Ruling the World: When Life Gets Gamed
codingconduct
0
310
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
450
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Rails Girls Zürich Keynote
gr2m
96
14k
Mind Mapping
helmedeiros
PRO
1
330
Making Projects Easy
brettharned
120
6.7k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
550
KATA
mclloyd
PRO
35
15k
The browser strikes back
jonoalderson
0
1.5k
Transcript
.BTUFSJOH TIBSFTIFFUQSFWJFX QPUBUPUJQT F[VSB
F[VSB w 1PEDBTU"VEJPCPPL IUUQTNPPLNPPLSBEJPDPN w -*/&DPSQ w -*/&ϊϕϧ։ൃ୲
/FX J04d dJ04
2͜ͷ1SFWJFX෦ɺԿ͔ରԠ͕ඞཁʁ
2͜ͷ1SFWJFX෦ɺԿ͔ରԠ͕ඞཁʁ 4%,ଆͰదʹදࣔͯ͘͠ΕΔ߹͋Δ
2͜ͷ1SFWJFX෦ɺԿ͔ରԠ͕ඞཁʁ ΞϓϦ։ൃऀଆͰมߋ͕ඞཁͳ߹͋Δ
ରԠલ γΣΞ͢Δίϯςϯπ w 63-ίϯςϯπͷ63- w ςΩετϋογϡλά
ରԠલ ରԠޙ63-ͷQSFWJFXΛදࣔ
ରԠޙ63-ͷQSFWJFXΛදࣔ ରԠલ
UIActivityViewController
let activityVC = UIActivityViewController( activityItems: [shareItem], applicationActivities: nil) self.present(activityVC, animated:
true, completion: nil)
activityItems: [URL(Web)] activityItems: [URL(file path)] activityItems: [Text] ࣗಈతʹదͳදࣔΛͯ͘͠ΕΔ߹ ྫ
activityItems: [URL, Text] activityItems: [UIImage] activityItems: [NSData] activityItems: [Text, UIImage]
վળͷ༨͕͋Δ߹ ྫ ΞϓϦΞΠίϯ
ଞʹ͍Ζ͍Ζͳύλʔϯ͕͋Δ͚ΕͲʜ
͜ΕΛԡ͓͚͑ͯ͞େৎʂ
ϙΠϯτ 1SFWJFX͞ΕΔίϯςϯπͷ༏ઌ
let activityVC = UIActivityViewController( activityItems: [...], applicationActivities: nil) self.present(activityVC, animated:
true, completion: nil)
6*"DUJWJUZ*UFN4PVSDF4USJOH63-%BUB 6**NBHF ϙΠϯτ 1SFWJFX͞ΕΔίϯςϯπͷ༏ઌ ͜Ε%PDVNFOUʹ໌จԽ͞Ε͓ͯΒͣɺ ࢲݸਓͰͷ࣮ݧΛجʹͨ͠ௐࠪ݁ՌͰ͢ɻ ެࣜใͰͳ͍͜ͱΛ͝ཹҙ͍ͩ͘͞ɻ
activityItems: [URL, String] 6*"DUJWJUZ*UFN4PVSDF4USJOH63-*NBHF ϙΠϯτ 1SFWJFX͞ΕΔίϯςϯπͷ༏ઌ
activityItems: [ItemSource(URL), String] ϙΠϯτ 1SFWJFX͞ΕΔίϯςϯπͷ༏ઌ 6*"DUJWJUZ*UFN4PVSDF4USJOH63-*NBHF
ϙΠϯτ -1-JOL.FUBEBUB
-1-JOL.FUBEBUB An object that contains metadata about a URL https://developer.apple.com/documentation/linkpresentation/lplinkmetadata
•var originalURL: URL? •var url: URL? •var title: String? •var iconProvider: NSItemProvider? •var imageProvider: NSItemProvider? •var videoProvider: NSItemProvider? •var remoteVideoURL: URL?
class ShareActivityItemSource: NSObject, UIActivityItemSource { func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) ->
LPLinkMetadata? { linkMetadata } func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any { placeholder } func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? { item } }
class ShareActivityItemSource: NSObject, UIActivityItemSource { func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) ->
LPLinkMetadata? { let linkMetadata = LPLinkMetadata() linkMetadata.title = "custom title" linkMetadata.iconProvider = NSItemProvider(contentsOf: imageURL) return linkMetadata } linkMetadata.iconProvider (or imageProvider) linkMetadata.title
class ShareActivityLazyLoadItemSource: NSObject, UIActivityItemSource { init(_ url: URL) { self.originalURL
= url self.imageURL = saveImageInTemporaryDir(#imageLiteral(resourceName: "ezura"), fileName: "shareImage")! super.init() linkMetadata.title = "placeholder title" linkMetadata.originalURL = originalURL linkMetadata.iconProvider = NSItemProvider(contentsOf: imageURL) linkMetadata.imageProvider = NSItemProvider(contentsOf: imageURL) metadataProvider.startFetchingMetadata(for: originalURL) { [linkMetadata] metadata, error in linkMetadata.title = metadata?.title linkMetadata.url = metadata?.url linkMetadata.originalURL = metadata?.originalURL linkMetadata.iconProvider = metadata?.iconProvider linkMetadata.imageProvider = metadata?.imageProvider } } func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? { return linkMetadata }
88%$ ʮ&NCFEEJOHBOE4IBSJOH7JTVBMMZ3JDI-JOLTʯ IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED -1-JOL.FUBEBUBपΓͷৄࡉ
-1-JOL.FUBEBUBΛ͏ํ๏ͷ·ͱΊ w ํ๏ w -1-JOL.FUBEBUBʹλΠτϧΞΠίϯͷใΛೖΕΔ w ্هΛ6*"DUJWJUZ*UFN4PVSDFͷϝιουܦ༝Ͱ͢ w PQUJPOBMͨ͠-1-JOL.FUBEBUBͷQSPQFSUZΛߋ৽͢Δ w
ҙ 4IBSFઌʹ-1-JOL.FUBEBUB͞ΕΔ 4IBSFઌͰΘΕΔՄೳੑ͕͋Δ
3FDBQ w ϙΠϯτ1SFWJFX͞ΕΔίϯςϯπͷ༏ઌ 6*"DUJWJUZ*UFN4PVSDF5FYU63-%BUB 6**NBHF 1SFWJFX͍ͨ͠ίϯςϯπΛ6*"DUJWJUZ*UFN4PVSDFܦ༝Ͱ͢ ෳͷ6*"DUJWJUZ*UFN4PVSDF͕͋Δ߹ઌউͪ
w ϙΠϯτ-1-JOL.FUBEBUB w -1-JOL.FUBEBUBʹλΠτϧΞΠίϯͷใΛೖΕΔ w ্هΛ6*"DUJWJUZ*UFN4PVSDFͷϝιουܦ༝Ͱ͢ ҙ4IBSFઌʹ-1-JOL.FUBEBUB͞ΕΔ
ࢀߟจݙ w -1-JOL.FUBEBUB IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOMJOLQSFTFOUBUJPO MQMJOLNFUBEBUB w &NCFEEJOHBOE4IBSJOH7JTVBMMZ3JDI-JOLT IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED w -JOL1SFTFOUBUJPO
IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOMJOLQSFTFOUBUJPO