この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
1 はじめに
MSStickerBrowserViewControllerは、MSStickerView(ステッカー)を簡単に管理できるビューコントローラーです。 これを利用すると、ステッカーが簡単に管理できる他、長押しで、ステッカーを剥がして、ドラッグアンドドロップでメッセージに貼りつけたりする事ができます。
MSStickerBrowserViewControllerは、ビューとしてMSStickerBrowserViewを保持しています。また、データソースのデリゲートになっています。なお、データソースはMSStickerの配列です。
iMessage Applcationでプロジェクトを作成すると、デフォルトでは、ストーリーボード(MainInterface.storyboard)のビューが使用されていますが、最終的には、これを置き換えます。
なお、その他のメッセージ拡張については下記をご参照下さい。
[iOS 10] メッセージ拡張の作成方法
[iOS 10] メッセージ拡張 MSMessageTemplateLayoutによるテキストや画像(映像)の配置
[iOS 10] メッセージ拡張 MSSessionで「まるばつゲーム」を作ってみた
[iOS 10] メッセージ拡張 ノンプログラミングによるスタンプ作成
[iOS 10] メッセージ拡張 ノンプログラミングによるアニメーションスタンプ作成
2 実装
(1) プロジェクト作成
File > New > Project から iMessage Applicationで新規にプロジェクトを作成します。
(2) MSStickerBrowserViewController
続いて、MessageExtensionプロジェクトに New File で Ccoa Touch Classを追加します。
クラスは、MSStickerBrowserViewControllerを継承します。
Messagesをimportします。
(3) データソース(MSSticker)
データソースとして、MSStickerの配列を用意します。
そして、MSStickerBrowserViewDataSourceプロトコルのメソッドである、numberOfStickers()で要素数、stickerBrowserView()で指定されたインデックスのMSStickerを返すようにします。
import UIKit
import Messages
class MyMSStickerBrowserViewController: MSStickerBrowserViewController {
var stickers = [MSSticker]()
override func viewDidLoad() {
super.viewDidLoad()
}
override func numberOfStickers(in stickerBrowserView: MSStickerBrowserView) -> Int {
return stickers.count
}
override func stickerBrowserView(_ stickerBrowserView: MSStickerBrowserView, stickerAt index: Int) -> MSSticker {
return stickers[index]
}
・・・省略・・・
(4) データの初期化
MSStickerBrowserViewControllerの生成時に、MSStickerを生成するコードを追加します。
class MyMSStickerBrowserViewController: MSStickerBrowserViewController {
var stickers = [MSSticker]()
override func viewDidLoad() {
super.viewDidLoad()
for n in 1...6 {
if let path = Bundle.main.path(forResource: "animation00\(n)", ofType: "gif") {
let url = URL(fileURLWithPath: path)
stickers.append(try! MSSticker(contentsOfFileURL: url, localizedDescription: ""))
}
}
}
・・・省略・・・
使用される画像は、MessageExtensionプロジェクトに追加しておきます。
(5) ビューの変更
最後に、MessagesViewControllerの方で、今作成したビューに置き換えます。
import UIKit
import Messages
class MessagesViewController: MSMessagesAppViewController {
var myViewController: MyMSStickerBrowserViewController!
override func viewDidLoad() {
super.viewDidLoad()
myViewController = MyMSStickerBrowserViewController(stickerSize: .small)
myViewController.view.frame = self.view.frame
self.addChildViewController(myViewController)
myViewController.didMove(toParentViewController: self)
self.view.addSubview(myViewController.view)
}
・・・省略・・・
実際に利用している様子です。
3 最後に
今回は、MSStickerBrowserViewControllerを使用して、メッセージ拡張のビューを作成してみました。 メッセージ拡張アプリを作成する場合、ビューの作成が必要になりますが、このようにステッカーを定型的に並べるだけであれば、これを使用することで非常に簡単に作成することができます。
4 参考リンク
API Reference Framework Messages
アニメーションGIFは、こちらから利用させて頂きました http://sozai-good.com/