【问题标题】:How to add sticker VIEWS to browser view in swift?如何快速将贴纸视图添加到浏览器视图?
【发布时间】:2016-09-29 13:30:26
【问题描述】:

好吧,就像每个人一样,我是 Swift 中 ms 贴纸的新手,但我正在尝试弄清楚 mssticker 和 msstickerview 之间的用途/区别。我在这里https://developer.apple.com/reference/messages/msstickerview/1648434-sticker 阅读了 API,但找不到这个相对简单问题的答案 - 似乎您只能将 MSStickers(而不是 StickerViews)添加到 MSStickerBrowserView,这是显示它们的唯一方法。但是,我需要添加 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 不符合协议 msstickerbrowserview数据源

因为所需的功能没有像以前那样实现。一个如何显示贴纸视图?我做错了什么?

【问题讨论】:

    标签: ios swift swift3 msstickerview


    【解决方案1】:

    您不能将MSStickerViews 添加到MSStickerBrowserView。为了使用您的子类,您必须按照 Apple 的 MSStickerBrowserView 文档构建自己的接口:

    如果您需要额外的自定义,您必须使用 MSStickerView 对象构建您自己的用户界面。

    如果您想模拟浏览器视图的外观,您可以使用 UICollectionView 并使用您的贴纸视图填充单元格

    【讨论】:

    • 好的,谢谢 - 我如何构建 uicollectionview?你有这样做的经验吗?刚刚接触这个概念
    • 它与表格视图非常相似 - 有很多例子:raywenderlich.com/136159/…
    猜你喜欢
    • 2020-10-06
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多