swift – 回复MSSticker皮肤在iOS 10 iMessage贴纸应用程序

我在iOS 10中尝试使用贴纸iMessage应用程序,并在MSMessagesAppViewController中遇到覆盖func didStartSending(_ message:MSMessage,conversation:MSConversation)方法的问题.当“剥离”MsstickerView的贴纸时,我会期望在didStartSending方法上收到某种回调.但事实并非如此.有没有人知道这是否是预期的行为,和/或者是否有另一种方式订阅回调,当这些贴纸被剥离,拖动并放入MSConversation?我意识到,didStartSending是为用户点击发送按钮而保留的,但肯定应该有一些方式知道什么时候用户拖动Msstickers,而不会一起盗取一些UIView拖动/直读启发式.

消息视图控制器:

class MessagesViewController: MSMessagesAppViewController {

    var nYCStickersbroswerViewController: NYCStickersbroswerViewController!

    override func viewDidLoad() {
        super.viewDidLoad()
        nYCStickersbroswerViewController = NYCStickersbroswerViewController(stickerSize: .regular)
        nYCStickersbroswerViewController.view.frame = self.view.frame

        self.addChildViewController(nYCStickersbroswerViewController)
        nYCStickersbroswerViewController.didMove(toParentViewController: self)
        self.view.addSubview(nYCStickersbroswerViewController.view)

        nYCStickersbroswerViewController.loadStickers()
        nYCStickersbroswerViewController.stickerbrowserView.reloadData()
    }

    ...

    override func didStartSending(_ message: MSMessage,conversation: MSConversation) {
        // Called when the user taps the send button.
        print(message) // should this not contain the sticker that is peeled,dragged,and dropped into the conversation?
    }

 }

贴纸浏览器:

import Foundation
import UIKit
import Messages

class Assticker: Mssticker {
    var identifier: String?
}

class NYCStickersbroswerViewController: MsstickerbrowserViewController {

    var stickers = [Assticker]()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func changebrowswerViewBackgroundColor(color: UIColor) {
        stickerbrowserView.backgroundColor = color
    }

    func loadStickers() {
        createSticker(name: "brooklyn",localizedDescription: "brooklyn Bridge Sticker")
        createSticker(name: "liberty",localizedDescription: "Statue of Liberty Sticker")
        createSticker(name: "love",localizedDescription: "I love New York Sticker")
        createSticker(name: "mets",localizedDescription: "New York Mets Sticker")
        createSticker(name: "rangers",localizedDescription: "New York Rangers Sticker")
        createSticker(name: "subway",localizedDescription: "New York City MTA Subway Train Sticker")
    }

    func createSticker(name: String,localizedDescription: String) {
        guard let stickerPath = Bundle.main.pathForResource(name,ofType: "png") else {
            print("Call ae cab,you're intoxicated.")
            return
        }
        let stickerURL = URL(fileURLWithPath: stickerPath)
        let sticker: Assticker
        do {
            try sticker = Assticker(contentsOfFileURL: stickerURL,localizedDescription: localizedDescription)
            sticker.identifier = "something unique"
            stickers.append(sticker)
        } catch {
            print("Call a cab,you're intoxicated.")
        }
    }

    override func numberOfStickers(in stickerbrowserView: MsstickerbrowserView) -> Int {
        return self.stickers.count
    }
    override func stickerbrowserView(_ stickerbrowserView: MsstickerbrowserView,stickerAt index: Int) -> Mssticker {
        return self.stickers[index]
    }

}
这是一个子类和委托,它将绑定到MsstickerView用于选择和剥离交互的轻敲和长按手势识别器.如果执行MsstickerView更改这可能不再提供事件,但不应该崩溃.
import UIKit
import Messages

protocol InstrumentedStickerViewDelegate: class {
    func stickerViewDidSelect(stickerView: MsstickerView)
    func stickerViewDidPeel(stickerView: MsstickerView)
}

class InstrumentedStickerView: MsstickerView {
    weak var delegate: InstrumentedStickerViewDelegate?

    override init(frame: CGRect) {
        super.init(frame: frame)

        for gestureRecognizer in gestureRecognizers ?? [] {
            if let tapGestureRecognizer = gestureRecognizer as? UITapGestureRecognizer {
                tapGestureRecognizer.addTarget(self,action: #selector(didTap))
            } else if let longPressGestureRecognizer = gestureRecognizer as? UILongPressGestureRecognizer {
                longPressGestureRecognizer.addTarget(self,action: #selector(didLongPress))
            }
        }
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func didTap(tapGestureRecognizer: UITapGestureRecognizer) {
        if tapGestureRecognizer.state == .Recognized {
            delegate?.stickerViewDidSelect(self)
        }
    }

    func didLongPress(longPressGestureRecognizer: UILongPressGestureRecognizer) {
        if longPressGestureRecognizer.state == .Began {
            delegate?.stickerViewDidPeel(self)
        }
    }
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...