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
650
アプリが動いたその先へ (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
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
150
フィードバックで育てるAI開発
kotaminato
1
110
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
250
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.3k
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.4k
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
480
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
840
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.8k
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
200
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
160
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
140
Featured
See All Featured
Statistics for Hackers
jakevdp
799
230k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Paper Plane (Part 1)
katiecoart
PRO
0
9.6k
Become a Pro
speakerdeck
PRO
31
6k
The Curious Case for Waylosing
cassininazir
1
430
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Facilitating Awesome Meetings
lara
57
7k
Un-Boring Meetings
codingconduct
0
340
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
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