YouTubeビデオをアプリで共有できるようにする共有拡張機能を作成していますが、カスタムUIをスムーズに表示するのに苦労しています。生のYoutubeURLだけを含むデフォルトのビューコントローラーの代わりに、サムネイルとビデオタイトルを表示して、Facebookの拡張機能と視覚的に似た何かをしたいと思います。私が最初に試みたのは、MainInterfaceストーリーボードShareViewControllerの編集でしたが、そうすることで、カスタムインターフェイスが簡単に表示され、デフォルトのUIレイアウトによって「オーバーライド」されます。そのため、UIを使用して別のView Controllerをストーリーボードに追加し、ShareViewControllerに追加しました。
override func presentationAnimationDidFinish() {
super.presentationAnimationDidFinish()
DispatchQueue.main.async {
self.pushConfigurationViewController(customVC)
}
これの問題は明らかに、カスタムコントローラーがプッシュされる前にデフォルトのビューコントローラーが表示されることです。したがって、問題は、共有拡張機能が開始されたときにカスタムUIをすぐに表示するにはどうすればよいかということです。 .plistでNSExtensionPrincipalClassを試してみましたが、肯定的な結果は得られませんでした
前もって感謝します
さて、もう少し掘り下げて検索すると、ShareViewControllerを**ではなくUIViewControllerのサブクラスにする必要があることがわかりました。 SLComposeServiceViewController **。ストーリーボードでインターフェイスを設計したので、.plistをそのままにしましたが、VCここで説明するフルスクリーンになるという問題を考慮する必要がありました: iOS 8 Share Extensionカスタムビューコントローラーのサイズ
私はそれを解決するためにそこで@Daleの答えを取りました。
これらの一般的な手順は、SLComposeServiceViewController
を使用せずに機能しました( 実装時のコミット時のコードは次のとおりです )。最後の画像は結果を示していますが、ステップ6は、フォームだけでなく、何でもかまいません。
ステップ:
(code)ShareViewController
を単純なUIViewController
に変更します
(code)ShareViewController
にぼかし効果を追加します
(storyboard)コンテナビューをShareViewController
に追加します
(ストーリーボード)ナビゲーションコントローラーを追加
(storyboard)ナビゲーションコントローラーをShareViewController
のコンテナービューに埋め込みます
ナビゲーションコントローラーでビューコントローラーをカスタマイズします(this SO thread たとえばを参照)
ShareViewController
を単純なUIViewController
に変更しますimport UIKit
class ShareViewController: UIViewController {
// ^^^^^^^^^^^^^^^^
ShareViewController
にぼかし効果を追加します // ShareViewController continued from Step 1.
override func viewDidLoad() {
super.viewDidLoad()
// https://stackoverflow.com/questions/17041669/creating-a-blurring-overlay-view/25706250
// only apply the blur if the user hasn't disabled transparency effects
if UIAccessibilityIsReduceTransparencyEnabled() == false {
view.backgroundColor = .clear
let blurEffect = UIBlurEffect(style: .dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
//always fill the view
blurEffectView.frame = self.view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.insertSubview(blurEffectView, at: 0)
} else {
view.backgroundColor = .black
}
// Do any additional setup after loading the view.
}
ShareViewController
に追加しますContainer View
をオブジェクトライブラリからストーリーボードのShareViewController
にドラッグし、サイズを調整します。例えば:
ナビゲーションコントローラーをオブジェクトライブラリからストーリーボードにドラッグします。
ShareViewController
のコンテナービューに埋め込むControlキーを押しながらShareViewController
のコンテナビューからナビゲーションコントローラにドラッグし、メニューから[埋め込み]を選択します。これに似ているはずです:
私の結果:
Appleによれば、拡張機能の作成時にデフォルトのVCを無効にするだけです。「Xcode共有テンプレートの使用」セクションの注を参照してください。