首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何快速将粘贴视图添加到浏览器视图中?

如何快速将粘贴视图添加到浏览器视图中?
EN

Stack Overflow用户
提问于 2016-09-29 01:32:50
回答 1查看 1.2K关注 0票数 0

好吧,就像大家一样,我对斯威夫特的贴纸很陌生,但我想弄清楚mssticker和msstickerview的目的/区别。我在这里读过API https://developer.apple.com/reference/messages/msstickerview/1648434-sticker,但是找不到这个相对简单问题的答案--似乎您只能将MSStickers (而不是StickerViews)添加到MSStickerBrowserView中,这是显示它们的唯一方法。但是,我需要添加StickerVIEWS,因为我正在尝试实现一个自定义粘贴视图类。

我的贴纸被添加到我的浏览器视图:

代码语言:javascript
复制
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数组中。

以下是如何填充浏览器:

代码语言:javascript
复制
 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数组。

代码语言:javascript
复制
 func stickerBrowserView(_ stickerBrowserView: MSStickerBrowserView, stickerAt index: Int) -> MSStickerView {
        return stickerViews[index] //this isnt displaying stickerveiws only stickers
    }

但是,这会导致以下错误:

messagesviewcontroller不符合msstickerBrowserview数据源协议。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-29 05:30:26

不能将MSStickerViews添加到MSStickerBrowserView中。为了使用您的子类,您必须根据苹果的MSStickerBrowserView文档构建自己的界面

如果需要其他自定义,则必须使用MSStickerView对象构建自己的用户界面。

如果要模拟浏览器视图的外观,只需使用UICollectionView并使用粘贴视图填充单元格即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39760009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档