0

わかりました、みんなと同じように、Swiftのmsステッカーは初めてですが、msstickerとmsstickerviewの目的/違いを理解しようとしています。ここで API を読みましたhttps://developer.apple.com/reference/messages/msstickerview/1648434-stickerしかし、この比較的単純な問題に対する答えが見つかりません。 、これがそれらを表示する唯一の方法です。ただし、実装しようとしているカスタム ステッカー ビュー クラスがあるため、StickerVIEWS を追加する必要があります。

私のステッカーは、ここで私のブラウザー ビューに追加されます。

func loadStickers() {


        var url: URL?
        var i = 1
        while true {
            url = Bundle.main.url(forResource: "test\(i)", withExtension: "png") //change test for packs
            print("URL IS THIS: \(url)")
            guard let url = url else { break }

            //make it a sticker
            let sticker = try! MSSticker(contentsOfFileURL: url, localizedDescription: "")
            let stickerView = InstrumentedStickerView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
            stickerView.sticker = sticker
            stickerView.delegate = self

            stickerViews.append(stickerView)
            stickers.append(sticker)

            i += 1
        }

    }


func createStickerBrowser() {
        let controller = MSStickerBrowserViewController(stickerSize: .regular)

        addChildViewController(controller)
        view.addSubview(controller.view)

        controller.stickerBrowserView.backgroundColor = UIColor.white
        controller.stickerBrowserView.dataSource = self

        //resize this programmatically later
        view.topAnchor.constraint(equalTo: controller.view.topAnchor).isActive = true
        view.bottomAnchor.constraint(equalTo: controller.view.bottomAnchor).isActive = true
        view.leftAnchor.constraint(equalTo: controller.view.leftAnchor).isActive = true
        view.rightAnchor.constraint(equalTo: controller.view.rightAnchor).isActive = true
    }

ご覧のとおり、ステッカーごとにステッカーとステッカー ビューの両方を作成しています。私のステッカーは配列に格納され、stickersステッカー ビューは配列に格納されていますstickerViews

ブラウザにデータが取り込まれる方法は次のとおりです。

 func numberOfStickers(in stickerBrowserView: MSStickerBrowserView) -> Int {
        return stickers.count
    }

    func stickerBrowserView(_ stickerBrowserView: MSStickerBrowserView, stickerAt index: Int) -> MSSticker {
        return stickers[index] //this isnt displaying stickerveiws only stickers
    }

これらのメソッドの戻り値の型を StickerView に変更し、代わりに stickerView 配列を返そうとしました

 func stickerBrowserView(_ stickerBrowserView: MSStickerBrowserView, stickerAt index: Int) -> MSStickerView {
        return stickerViews[index] //this isnt displaying stickerveiws only stickers
    }

ただし、これにより次のエラーが発生します。

messagesviewcontroller はプロトコル msstickerbrowserviewdatasource に準拠していません

必要な機能が以前のように実装されていないためです。ステッカー ビューを表示するにはどうすればよいですか? 私は何を間違っていますか?

4

1 に答える 1