Tôi đang thử nghiệm với các ứng dụng iMessage hình dán trong iOS 10 và tôi đang gặp sự cố với phương pháp override func didStartSending(_ message: MSMessage, conversation: MSConversation)
trong MSMessagesAppViewController
. Khi "bóc" một hình dán từ MSStickerView
, tôi sẽ nhận được một số kiểu gọi lại theo phương thức didStartSending
. Nhưng nó xuất hiện đây không phải là trường hợp. Có ai biết nếu đây là hành vi dự kiến và/hoặc nếu có một cách khác để đăng ký gọi lại cho khi các nhãn dán được bóc vỏ, kéo và rơi vào MSConversation
? Tôi nhận thấy rằng didStartSending
được dành riêng khi người dùng chạm vào nút gửi nhưng chắc chắn phải có một số cách để biết thời điểm người dùng kéo MSStickers mà không cần hack cùng một số tính năng quét UIView/rect-reading heuristic.Gọi lại cho MSSticker Peels trong iOS 10 Ứng dụng hình dán iMessage
Messages Xem Bộ điều khiển:
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?
}
}
Sticker Trình duyệt:
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]
}
}
Bạn đã bao giờ làm việc này chưa? Tôi đang gặp vấn đề tương tự – skyguy
Các câu trả lời bên dưới là công việc tuyệt vời xung quanh, nhưng tôi chưa đưa ra giải pháp bằng cách sử dụng kho 'MSStickerBrowserViewController'. –